2013-11-14 44 views
2

我的環境如下:使用乘客使用Rails和Apache 2/SpawnPreparer權限被拒絕

  • 的Ubuntu 10.04
  • 的Ruby 2.0.0
  • 的Rails 4.0

部署的Rails應用程序駐留在/ var/www/application中。部署由Capistrano的處理,因此,目錄結構如下:

[email protected]:/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 

配置/ deploy.rb被配置爲使用一個:本地紅寶石(其已被安裝到../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' 

也許是因爲沒有安裝乘客時,這是公認另一個RVM/Ruby安裝此起到了重要作用。乘客告訴我配置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安裝(位於根:-()和我將需要更改權限(但我沒有改變它們):

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

+0

你是怎麼解決這個問題的? – surfer190

回答

1

如果您已經使用了RVM安裝方法爲單個用戶,你有沒有考慮設置文件的所有權爲Ruby應用程序是相同的RVM的主人?

至於我自己,我已經跑進前這個問題,在這裏爲我做了什麼:

  • 管理RVM
  • 添加新的用戶能夠sudo來根
  • 創建新用戶
  • 登錄的新用戶,並安裝RVM爲單個用戶
  • 安裝乘客寶石
  • 運行乘客安裝了模塊rvmsudo
  • 設置Ruby應用程序的所有權是一樣的新的用戶帳戶RVM管理
  • 有時我不得不以下內容添加到我的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/[email protected]

希望這可以幫助!

0

我之前有同樣的問題與你,這是我如何解決這個問題:

嘗試用一套配置PassengerUser https://www.phusionpassenger.com/library/config/apache/reference/#passengeruser。使用安裝rvm時使用的用戶進行設置。因爲您將rails應用程序放在/ var/www /上,這是apache/www-data所擁有的,您需要指定擁有rvm的用戶。

因此,基於你的例子,只需在你的apache配置文件的DocumentRoot配置之後或之前添加:PassengerUser部署。

不要忘記重新啓動apache。祝你好運。