使用Passenger with Rails和Apache 2 / SpawnPreparer权限被拒绝

时间:2013-11-14 14:32:10

标签: ruby-on-rails ruby apache permissions passenger

我的环境如下:

  • Ubuntu 10.04
  • Ruby 2.0.0
  • Rails 4.0

部署的Rails应用程序驻留在/ var / www / application中。部署由Capistrano处理,因此,目录结构如下:

root@lvps91-250-114-42:/var/www/application# ls -la
total 16
drwxrwxr-x  4 www-data www-data 4096 2013-11-14 12:53 .
drwxr-xr-x  6 www-data www-data 4096 2013-11-12 22:54 ..
lrwxrwxrwx  1 www-data www-data   39 2013-11-14 12:53 current ->  /var/www/application/releases/20131114115156
drwxrwxr-x 11 www-data www-data 4096 2013-11-14 12:51 releases
drwxrwxr-x  8 www-data www-data 4096 2013-11-13 01:49 shared

config / deploy.rb配置为使用:local ruby​​(已安装到../shared中)。 capistrano配置:

require 'bundler/capistrano'
require 'rvm/capistrano'

#....

set :bundle_flags,               "--deployment"

set :default_shell, '/bin/bash -l'
set :rvm_ruby_string, :local

#....

before 'deploy:setup', 'rvm:install_rvm'   
before 'deploy:setup', 'rvm:install_ruby'  

这可能起到了作用,因为安装Passenger时会识别出另一个rvm / ruby​​安装。 Passenger告诉我如下配置Apache 2:

LoadModule passenger_module /root/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.24/buildout/apache2/mod_passenger.so
PassengerRoot /root/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.24
PassengerDefaultRuby /root/.rvm/wrappers/ruby-2.0.0-p247/ruby

但它抱怨我的.rvm安装(它位于root :-()中,我需要更改权限(但我没有更改它们):

It is recommended that you relax permissions as follows:

sudo chmod o+x "/root"

Press Ctrl-C to return to the shell. (Recommended)
After relaxing permissions, re-run this installer.
-OR-
Press Enter to continue anyway.

相应的sites-enabled/application配置:

<VirtualHost *:80>
   ServerName subdomain.domain.com
   # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /var/www/application/current/public    
   <Directory /var/www/application/current/public>
      # This relaxes Apache security settings.
      AllowOverride all
      # MultiViews must be turned off.
      Options -MultiViews
   </Directory>
</VirtualHost>

当我启动应用程序时,我的浏览器出现以下错误:

Cannot execute "/root/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.24/buildout/agents/SpawnPreparer": Permission denied (errno=13)

后:

sudo chmod o+x "/root"

一切正常。

你有什么建议来解决它?我应该重新安装.rvm和乘客吗?我可以重新配置Apache配置,以便Apache访问驻留在/ var / www / application中的所有可执行文件吗?

提前谢谢!!

jepetko

2 个答案:

答案 0 :(得分:1)

如果您已经为单个用户使用了rvm安装方法,您是否考虑过将ruby应用程序的文件所有权设置为与rvm的所有者相同?

对于我自己,我之前遇到过这个问题,这就是我所做的:

  • 创建用于管理rvm的新用户
  • 添加新用户以便能够sudo到root
  • 以新用户身份登录并以单个用户身份安装rvm
  • 安装乘客宝石
  • 使用rvmsudo
  • 运行模块的乘客安装
  • 将ruby应用程序的所有权设置为与rvm management的新用户帐户相同
  • 有时我不得不将以下内容添加到我的apache conf:
  • SetEnv LD_LIBRARY_PATH /home/rvmuser/.rvm/default/lib
  • SetEnv GEM_PATH /home/rvmuser/.rvm/gems/ruby-1.9.3-p484:/home/rvmuser/.rvm/gems/ruby-1.9.3-p484@global

希望这有帮助!

答案 1 :(得分:0)

我之前遇到过同样的问题,这就是我解决问题的方法:

尝试使用set config PassengerUser https://www.phusionpassenger.com/library/config/apache/reference/#passengeruser。使用安装rvm时使用的用户进行设置。因为你将rails应用程序放在/ var / www /是apache / www-data所拥有的,你需要指定拥有rvm的用户。

因此,基于您的示例,只需在apache配置上的DocumentRoot配置之后或之前添加:PassengerUser deploy。

别忘了重启apache。祝你好运。