乘客上的Sinatra app无法找到Rack(使用RVM)

时间:2011-03-24 01:46:43

标签: sinatra passenger rvm rack

我已经为这个Sinatra应用程序的登台服务器战斗了两天。我变得非常沮丧。最新的坑洞是乘客提出的Ruby错误:

  

没有这样的文件要加载 - 机架

nginx.conf文件显示我们正在使用的Ruby以及Passenger所在的位置:

passenger_root /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.5;
passenger_ruby /usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby;

好的,这对我们来说就是Ruby 1.9.2。

vhost配置包括:

root /var/www/staging-proweb/current/rack/public;
passenger_enabled on;
rack_env          staging;

并且rackup文件包含:

require 'rubygems'
require 'sinatra'
require 'myapp1.rb'

run Sinatra::Application

然后将我们发送到myapp1.rb文件,其中包含

require 'rubygems'
require 'rack'
require 'sinatra'

......我认为sinatra要求就是要求机架。

宝石在那里:

~$ which ruby
/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby
~$ gem list rack

*** LOCAL GEMS ***

rack (1.2.2)
rack-flash (0.1.1)

错误似乎位于RVM目录中的一个文件中,从堆栈跟踪的前三行判断:

0 /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb   36  in `require'
1 /usr/local/rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb   36  in `require'
2 /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.5/lib/phusion_passenger/rack/application_spawner.rb  219 in `load_rack_app'

接下来我应该尝试什么?我在这一点上很难过。

1 个答案:

答案 0 :(得分:3)

问题似乎是passenger_ruby配置值。 RVM提供了一个包装器来为该Ruby(包括gem)设置适当的环境,因此passenger_ruby行应该已经读取

    passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.2-p180/ruby;

有了这个,我们似乎已经开始运作了。