我的环境如下:
- 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 安装(它位于根 :-() 并且我需要更改权限(但我没有更改它们):
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 和 passenger 吗?我可以重新配置 Apache 配置,以便 Apache 可以访问驻留在/var/www/application 中的所有那些可执行文件吗?
提前致谢!
杰佩特科
最佳答案
如果你使用过单用户的rvm安装方式,你是否考虑过将ruby应用程序的文件的所有权设置为与rvm的所有者相同?
对于我自己,我以前遇到过这个问题,这是我所做的:
- 创建管理 rvm 的新用户
- 添加新用户以便能够 sudo 到 root
- 以新用户身份登录并以单个用户身份安装 rvm
- 安装 passenger gem
- 使用 rvmsudo 为模块运行 passenger 安装
- 将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/ruby-1.9.3-p484@global
希望这对您有所帮助!
关于ruby-on-rails - 将 Passenger 与 Rails 和 Apache 2/SpawnPreparer 一起使用 权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980328/