Ruby 货架:无法加载此文件';西纳特拉';

Ruby 货架:无法加载此文件';西纳特拉';,ruby,sinatra,rack,Ruby,Sinatra,Rack,我已经安装了sinatra gem,如果我键入 require 'sinatra' 它返回true 但当我这么做的时候 rackup -d config.ru 它告诉我 nil Exception `LoadError' at /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36 - cannot load such file -- sinatra 这是我的config.ru require './app' set :envir

我已经安装了sinatra gem,如果我键入

require 'sinatra'
它返回
true

但当我这么做的时候

rackup -d config.ru
它告诉我

nil
Exception `LoadError' at /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36 - cannot load such file -- sinatra

这是我的
config.ru

require './app'

set :environment, ENV['RACK_ENV'].to_sym
set :app_file,     'app.rb'
disable :run

run Sinatra::Application
app.rb

require 'rubygems'
require 'sinatra'

get '' do
   'Hello World'
end
我不知道出了什么问题



我认为这只是设置
-d
选项的详细输出。服务器是否实际启动(在产生负载输出后)

发生的事情是。然后,Rack尝试通过
config.ru
加载应用程序,这反过来会加载您的
app.rb
app.rb
中的第一件事是
需要'sinatra'

Rubygems将原来的
require
方法替换为自己的方法。当您调用
时,需要它。如果尚未加载gem,这将引发LoadError,这将在加载gem之前发生

设置了
$DEBUG
标志后,Ruby将在引发异常时生成一条消息,即使它已被解救和处理,这就是您看到的

为了避免这种情况,只需在调用
-rackup
时省略
-d
标志(也许启用带有
-w
的警告将为您提供足够详细的输出,而不会让您陷入太多细节)

如果服务器没有启动,那么这将是一个不同的问题,而不是找不到Sinatra。如果是这种情况,您需要检查输出的其余部分以寻找线索


(请注意,我最初认为发生了其他事情,这就是我在评论中提出的问题。)

我猜你的rackup脚本是一个“rack”宝石桶 安装在diff ruby1.9x虚拟机中

可能是ruby1.9.2的早期版本 所以它看不到安装了sinatra


我会在命令行上尝试“哪个机架”

这肯定是加载路径的问题。无论如何,尝试通过和Bundler设置所需的ruby和gems。它确保Ruby解释器和加载路径是一致的。

你能在irb中执行
要求'rack'
吗?@matt它返回
true
你能直接用
Ruby app.rb运行应用程序吗?@matt它给nil:nil类(NoMethodError)
提供
config.ru:3:in
:未定义的方法
。我想它需要机架环境。看起来您尝试了
ruby config.ru
。尝试
ruby app.rb
。但考虑到它在需要你的应用程序后失败了,我认为我们更接近了解到底发生了什么。您能给出
哪个ruby
哪个rackup
的结果吗?不,它不输出任何内容。当我执行
rackup config.ru
rackup-w config.ru
时,插入符号就在那里卡住了,那么解决方案是什么!!
$ which ruby
/usr/local/bin/ruby
$ which rackup
/usr/local/bin/rackup
$ ruby -v
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux]
$ rackup -v
Rack 1.2 (Release: 1.5)