我的环境如下:
部署的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
答案 0 :(得分:1)
如果您已经为单个用户使用了rvm安装方法,您是否考虑过将ruby应用程序的文件所有权设置为与rvm的所有者相同?
对于我自己,我之前遇到过这个问题,这就是我所做的:
希望这有帮助!
答案 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。祝你好运。