我已经安装了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)
答案 0 :(得分:1)
我认为这只是设置-d
选项的详细输出。服务器是否实际启动(在产生负载输出后)?
这是怎么回事。 Using -d
sets Ruby’s $DEBUG
flag to true
。然后Rack会尝试通过config.ru
加载应用,然后app.rb
加载app.rb
。 require '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 ruby1.9x vm
中可能是ruby1.9.2的早期版本 所以它看不到安装的sinatra
我在命令行上尝试“哪个机架”
答案 2 :(得分:0)
这绝对是加载路径的问题。无论如何,尝试通过RVM和Bundler设置所需的红宝石和宝石。它确保Ruby解释器和加载路径是一致的。