![适当的 Passenger + Apache 权限来修复错误“没有这样的文件或目录 - config/environment.rb”](https://linux22.com/image/796921/%E9%80%82%E5%BD%93%E7%9A%84%20Passenger%20%2B%20Apache%20%E6%9D%83%E9%99%90%E6%9D%A5%E4%BF%AE%E5%A4%8D%E9%94%99%E8%AF%AF%E2%80%9C%E6%B2%A1%E6%9C%89%E8%BF%99%E6%A0%B7%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%20-%20config%2Fenvironment.rb%E2%80%9D.png)
我遇到了 Passenger 无法启动的问题,这是由于一个显然很常见的问题,Passenger 声称:没有这样的文件或目录 - config/environment.rb。
我在网上搜索了各种方法,发现这似乎是一个权限相关的问题。据我了解,Passenger 以 config.ru 和 config/environment.rb 文件的所有者身份运行。在我的例子中,此所有者是“admin”。我在 admin 用户的主目录中运行应用程序根目录。因此,我相信我使用以下命令设置了正确的权限:
sudo chown -R admin:admin /home/admin/www
和
sudo 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
- 使用以下方法清除 tmp
rm -rf /tmp/*
- 我是从 gemfile (不是 tarball) 安装的;运行了
gem install passenger
cmd (带有 2GB 交换空间)。 - 运行
passenger-install-apache2-module
cmd。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