Rackup:无法加载这样的文件'sinatra'

时间:2013-02-03 21:35:36

标签: ruby sinatra rack

我已经安装了sinatra gem并在irb中,如果我输入,

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

我不知道出了什么问题。


$ 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)

3 个答案:

答案 0 :(得分:1)

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

这是怎么回事。 Using -d sets Ruby’s $DEBUG flag to true。然后Rack会尝试通过config.ru加载应用,然后app.rb加载app.rbrequire 'sinatra'中的第一件事是require

Rubygems用自己的方法替换原始的require方法。当您致电$DEBUG tries to load the file normally using the existing load path and the original require method时。如果尚未加载gem,则会在加载gem之前引发LoadError,Rubygems catches

设置-d标志后,Ruby会在异常被提出时生成一条消息,即使它被救出并处理过,这就是你所看到的。

为了避免这种情况,只需省略rackup-w的调用的{{1}}标记(可能会使用{{1}}启用警告会为您提供足够详细的输出,而不会淹没您太多细节)。

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

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

答案 1 :(得分:1)

我的猜测是你的机架脚本是'机架'宝石的binstub 安装在diff ruby​​1.9x vm

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

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

答案 2 :(得分:0)

这绝对是加载路径的问题。无论如何,尝试通过RVM和Bundler设置所需的红宝石和宝石。它确保Ruby解释器和加载路径是一致的。