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

我有一个乘客不能启动的问题,因为乘客声称:没有这样的文件或目录 – config / environment.rb显然是一个普遍的问题。

我已经searchnetworking的高低,这似乎是一个权限相关的问题。 这是我的理解,乘客作为config.ru和config / environment.rb文件的所有者运行。 在我的情况下,这个所有者是“pipe理员”。 我正在运行pipe理员用户的主目录中的应用程序根目录。 所以我相信我有正确的权限设置使用: sudo chown -R admin:admin /home/admin/wwwsudo chmod -R 755 /home/admin/www

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

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

  <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

谢谢你的帮助。

Passenger是Apache的一个模块,作为Apache进程的一部分运行。 这意味着Apache用户需要拥有项目的权限。 从Apache的Passenger文档 :

您可能还需要调整您的文件/文件夹权限。 确保以下文件夹可被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. 

每当我有问题,我不明白,我通常重新启动一个新的驱动器在我的linode,并迅速做一个最低限度的安装,看看我的步骤列表的工作。 有时我在服务器上的其他操作会导致问题,因此在查看其他因素之前,最低限度的安装是很重要的。

至于乘客,你不能依靠其生成的错误消息100%。 有时你可能会错过一个index.html文件或一个视图文件,但是如果你阅读Passenger的错误,就像你搞砸了十个不同的东西。

我最近得到乘客从头开始工作,所以这里列出了我所做的事情:

  • 没有触及任何关于许可(除了你已经做了什么,我只是做了CHOWN步骤,没有CHMOD步骤)。
  • 不必触摸config.ru或config / environments.rb
  • 使用rm -rf /tmp/*清除tmp
  • 我从gemfile(而不是tarball)安装; 跑了gem install passenger CMD(2GB交换)。
  • 运行passenger-install-apache2-module cmd。 乘客将在最后给5行代码粘贴到httpd.conf中。 做过某事。

虚拟主机configuration看起来像这样:

 <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,就是这样!

您的PassengerAppRoot是错误的。 您指定了/home/admin/www/app但是您的应用程序实际上位于/home/admin/www/app/current 。 这就是为什么乘客找不到它。

解决scheme是修复configuration。

  PassengerAppRoot /home/admin/www/app/current