适当的 Passenger + Apache 权限来修复错误“没有这样的文件或目录 - config/environment.rb”

适当的 Passenger + Apache 权限来修复错误“没有这样的文件或目录 - config/environment.rb”

我遇到了 Passenger 无法启动的问题,这是由于一个显然很常见的问题,Passenger 声称:没有这样的文件或目录 - config/environment.rb。

我在网上搜索了各种方法,发现这似乎是一个权限相关的问题。据我了解,Passenger 以 config.ru 和 config/environment.rb 文件的所有者身份运行。在我的例子中,此所有者是“admin”。我在 admin 用户的主目录中运行应用程序根目录。因此,我相信我使用以下命令设置了正确的权限: sudo chown -R admin:admin /home/admin/wwwsudo chmod -R 755 /home/admin/www

应用程序根目录位于:/home/admin/www/app

这是我的虚拟服务器配置文件:

 <VirtualHost *:80>
    ServerName track.example.com
    DocumentRoot /home/admin/www/app/current/public
    <Directory /home/admin/www/app/current/public>
    Options FollowSymLinks
    AllowOverride none
    Order allow,deny
    Allow from all
    </Directory>
    PassengerResolveSymlinksInDocumentRoot on
    RailsBaseURI /
    PassengerAppRoot /home/admin/www/app
    RailsEnv production   
    ErrorLog ${APACHE_LOG_DIR}/error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel debug
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我正在运行 Ubuntu 12.0.4、Rails 3.2.8、Ruby 1.9.3、Passenger 3.0.18、Apache 2

感谢您的帮助。

答案1

每当我遇到无法理解的问题时,我通常会重新启动 linode 上的新驱动器并快速进行最低限度安装,以查看我的步骤列表是否有效。有时我在服务器上的其他操作会导致问题,因此在考虑其他因素之前,最低限度安装是否有效非常重要。

至于 Passenger,你不能 100% 地依赖它生成的错误消息。有时你可能会丢失 index.html 文件或视图文件,但如果你读了 Passenger 的错误,你就会觉得你搞砸了十件不同的事情。

我最近从头开始让 Passenger 工作,因此这里列出了我所做的事情:

  • 没有触及与权限相关的任何内容(除了你所做的之外,我只执行了 CHOWN 步骤;没有 CHMOD 步骤)。
  • 无需修改 config.ru 或 config/environments.rb
  • 使用以下方法清除 tmprm -rf /tmp/*
  • 我是从 gemfile (不是 tarball) 安装的;运行了gem install passengercmd (带有 2GB 交换空间)。
  • 运行passenger-install-apache2-modulecmd。Passenger 会在最后提供 5 行代码,粘贴到 httpd.conf 中。就这样。

虚拟主机配置如下:

<VirtualHost *:80>
    ServerName www.domain.com
    DocumentRoot /var/www/html/app/public
    <Directory /var/www/html/app/public>
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>

重新启动 apache 就完成了!

答案2

Passenger 是 Apache 的一个模块,作为 Apache 进程的一部分运行。这意味着 Apache 用户需要拥有该项目的权限。从阿帕奇乘客文件

您可能还需要调整文件/文件夹权限。确保以下文件夹可由 Apache 读取和执行:

* this public folder.

* the application’s config folder.

* all parent folders. That is, /webapps/rackapp and /webapps must also be readable and executable by Apache.

答案3

PassengerAppRoot错了。你指定了/home/admin/www/app,但你的应用实际上在 中/home/admin/www/app/current。这就是 Passenger 找不到它的原因。

解决办法是修复配置。

    PassengerAppRoot /home/admin/www/app/current

相关内容