如何使用Nginx和Passenger部署Sinatra应用程序?

时间:2012-01-25 17:22:09

标签: rubygems nginx sinatra passenger rack

我在Dreamhost虚拟专用服务器上。我之前从未编写过Sinatra应用程序或任何其他Rack应用程序。我只想尝试运行Hello World应用程序,但我一直收到错误的乘客错误页面:

no such file to load -- rack

我在域名/应用根目录中创建了public/tmp/

同样在app根目录中的是config.ru

require 'rubygems'
require 'sinatra'
require 'myapp'

run Sinatra::Application

我从Nginx文档中的Passenger中提取Sinatra section

最后,这是myapp.rb,我从Sinatra Intro doc的顶部撤出。

# myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

我怎样才能让它发挥作用?


修改

以下是乘客错误页面上给出的堆栈跟踪的前三行:

0 /usr/lib/ruby/1.8/rubygems/custom_require.rb 31 in `gem_original_require'
1 /usr/lib/ruby/1.8/rubygems/custom_require.rb 31 in `require'
2 /dh/nginx/passenger/lib/phusion_passenger/rack/application_spawner.rb 145 in `load_rack_app'

更新

我怀疑我发现为什么乘客无法找到机架,但我仍然没有找到解决方案。在nginx.conf的顶部是这一行:

user dhapache;

Passenger似乎正在寻找宝石dhapacheroot,我不确定它是基于ps aux | less给出的流程列表:

root     PassengerNginxHelperServer /dh/nginx/passenger ruby 3 4 0 6 0 300 1 nobody 999 150 /tmp/passenger.19012
root     Passenger spawn server
dhapache nginx: worker process
dhapache nginx: worker process
root     nginx: master process /dh/nginx/bin/nginx-be -c /dh/nginx/servers/httpd-ps77303/nginx.conf -p /dh/nginx/servers/httpd-ps77303/var/

但是,在任何一种情况下,gem env列出的宝石路径仅指向没有宝石的地方。如果乘客在这些地方寻找宝石,它就不会找到任何宝石。

来自sudo -u dhapache gem env

的宝石路径
/var/lib/gems/1.8
/root/.gem/ruby/1.8

来自sudo -u root gem env

的宝石路径
/var/lib/gems/1.8
/dh/apache/.gem/ruby/1.8

在这两种情况下,第一个(相同的)目录都是空的,列出的第二个目录不存在。

在此服务器设置中,应用程序托管在/home/[username]/[domain]/下,本地gem位于/home/[username]/.gems/。作为app用户运行gem env会显示本地gem路径。

如何让乘客找到我当地的宝石?

1 个答案:

答案 0 :(得分:0)

使用Bundler的Gemfile。使用RVM