Ruby 货架:无法加载此文件';西纳特拉';
我已经安装了sinatra gem,如果我键入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
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)