【问题标题】:How to make passenger and rvm work together?如何让passenger和rvm协同工作?
【发布时间】:2013-09-12 18:22:46
【问题描述】:

我已经预先安装了rvm。我决定从一个包 (nginx-full and passenger) 安装乘客,并希望使用与rvm 一起安装的ruby。但不知何故,它不起作用。这是我正在使用的测试sinatra 应用程序 (~yuri/a1/app.rb):

require 'rubygems'
require 'sinatra'

get '/' do
  "Hello and Goodbye"
end

~yuri/a1/config.ru:

require 'rubygems'
require 'sinatra'

require './app.rb'
run Sinatra::Application

nginx.conf:

http {
    ...
    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
        # the paths in the above file point out to debian repository's ruby version
    server {
        server_name a1;
        root   /home/yuri/a1;
        access_log   /var/log/nginx/a1-access.log;
        error_log   /var/log/nginx/a1-error.log;
        passenger_enabled   on;
        passenger_ruby   /home/yuri/.rvm/wrappers/ruby-1.9.3-p385@a1/ruby;
    }
}

但是当我 w3m http://a1 access.log 说:

127.0.0.1 - - [12/Sep/2013:21:14:58 +0300] "GET / HTTP/1.0" 403 168 "-" "w3m/0.5.2+cvs-1.1027"

error.log:

2013/09/12 21:14:58 [error] 27622#0: *1 directory index of "/home/yuri/tr/" is forbidden, client: 127.0.0.1, server: tr, request: "GET / HTTP/1.0", host: "a1"

如果我按以下方式运行该应用程序,则该应用程序可以运行:rvm ruby-1.9.3-p385@a1 && ruby app.rb

有没有办法追踪那里发生的事情?或者如何让它发挥作用?

【问题讨论】:

  • 您在 errors.log 中看到了什么?另外,您是否检查过 /home/yuri 是否可以被 Nginx 运行的用户 www-data 访问?
  • 我已经指定了我在errors.log 中看到的内容:目录索引错误。是的,www-data 可以读取/home/yuri/a1 中的文件(这是用户nginx 运行的身份)。
  • 不是 /home/yuri/a1,/home/yuri。 所有父目录必须可访问。你也检查过吗?
  • 哦,我现在明白了。您的“根”必须指向“公共”目录。
  • @Hongli 是passenger的要求吗?或者可能是rack 的?

标签: ruby nginx sinatra rvm passenger


【解决方案1】:

passenger 期望应用程序目录具有特定的layout。特别是,config.ru 必须相对于文档根位于上一层。那就是:

/etc/nignx/nginx.conf:

...
http {
    ...
    passenger_root   /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
    server {
        server_name a1;
        root   /home/yuri/a1/public;
        access_log   /var/log/nginx/a1-access.log;
        error_log   /var/log/nginx/a1-error.log;
        passenger_ruby   /home/yuri/.rvm/wrappers/ruby-1.9.3-p385@a1/ruby;
        passenger_enabled   on;
    }
}

~yuri/a1/app.rb:

require 'sinatra'
get '/' do
  "Hello World!"
end

~yuri/a1/config.ru:

require './app'
run Sinatra::Application

还有:

$ rvm install 1.9.3-p385
...
$ rvm --create use 1.9.3-p385@a1
...
$ curl http://a1
Hello World!

【讨论】:

  • 您的评论是救命稻草!谢谢!我希望官方 RVM 文档和您的评论一样有用。
【解决方案2】:

我刚刚使用 apt 方法在 Ubuntu Precise 上设置了乘客 4.0.17。

这对我有用。

在/etc/nginx/nginx.conf中

    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
    passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p247/ruby;

尝试将passenger_ruby移到服务器块之外。

祝你好运

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 2017-11-15
    • 2020-01-13
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多