【问题标题】:Rackup: cannot load such file 'sinatra'Rackup:无法加载此类文件“sinatra”
【发布时间】:2014-05-13 16:51:46
【问题描述】:

我已经安装了 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)

【问题讨论】:

  • 你能在 irb 中做require 'rack' 吗?
  • @matt 它返回true
  • 可以直接用ruby app.rb运行应用吗?
  • @matt 它给出了config.ru:3:in
    ':未定义的方法to_sym' for nil:NilClass (NoMethodError)。我想它需要机架环境。
  • 您似乎尝试过ruby config.ru。试试ruby app.rb。但鉴于它在要求您的应用程序后失败,我认为我们更接近于解决正在发生的事情。能否给出which rubywhich rackup的结果?

标签: ruby sinatra rack


【解决方案1】:

我认为这只是设置 -d 选项的详细输出。服务器是否真正启动(在产生大量输出之后)?

正在发生的事情是这样的。 Using -d sets Ruby’s $DEBUG flag to true。 Rack 然后尝试通过config.ru 加载应用程序,这反过来又加载您的app.rbapp.rb 中的第一件事是 require 'sinatra'

Rubygems 用自己的方法替换了原来的 require 方法。当你打电话给require 时,它是tries to load the file normally using the existing load path and the original require method。如果 gem 尚未加载,这将引发 LoadError,在加载 gem 之前 Rubygems catches

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

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

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

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

【讨论】:

  • 不,它不输出任何东西。当我做 rackup config.rurackup -w config.ru 时,插入符号就卡在那里了
【解决方案2】:

我的猜测是你的 rackup 脚本是一个 'rack' gem 的 binstub 安装在 diff ruby​​1.9x 虚拟机中

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

我会在命令行上尝试“which rackup”

【讨论】:

  • 那到底是什么解决方案!!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2015-08-16
    • 2019-03-30
    • 2021-11-04
    相关资源
    最近更新 更多