【问题标题】:undefined method `require' for Rack::BuilderRack::Builder 的未定义方法“require”
【发布时间】:2016-02-26 04:46:21
【问题描述】:

当我尝试通过rackup 命令启动我的 Sinatra 应用程序时,我收到此错误:

/home/matteog/Scrivania/ruby_ws/config.ru:1:in `block in <main>': undefined method `require' for #<Rack::Builder:0x000000027d4e50> (NoMethodError)
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize'
from /home/matteog/Scrivania/ruby_ws/config.ru:in `new'
from /home/matteog/Scrivania/ruby_ws/config.ru:in `<main>'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/builder.rb:49:in `eval'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/builder.rb:49:in `new_from_string'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/builder.rb:40:in `parse_file'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/server.rb:299:in `build_app_and_options_from_config'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/server.rb:208:in `app'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/server.rb:336:in `wrapped_app'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/server.rb:272:in `start'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/lib/rack/server.rb:147:in `start'
from /home/matteog/.rvm/gems/ruby-2.1.2/gems/rack-1.6.4/bin/rackup:4:in `<top (required)>'
from /home/matteog/.rvm/gems/ruby-2.1.2/bin/rackup:23:in `load'
from /home/matteog/.rvm/gems/ruby-2.1.2/bin/rackup:23:in `<main>'
from /home/matteog/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
from /home/matteog/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'

但是当我使用ruby helloworld.rb 时我没有问题。我的config.ru很简单:

require 'helloworld'
run Sinatra::Application

此外,我在rackup 之前成功执行了bundle install,并使用了这个 Gemfile(省略了输出):

source 'https://rubygems.org'

ruby '2.1.2'

gem 'sinatra', '>= 1.4.5', '~> 1.4'
gem 'sinatra-contrib', '>= 1.4.2', '~> 1.4'
gem 'dm-core', '>= 1.2.0', '~> 1.2'
gem 'dm-sqlite-adapter', '>= 1.2.0', '~> 1.2'
gem 'dm-validations', '>= 1.2.0', '~> 1.2'
gem 'dm-timestamps', '>= 1.2.0', '~> 1.2'
gem 'dm-migrations', '>= 1.2.0', '~> 1.2'

group :development, :test do
  gem 'timecop'
  gem 'simplecov'
  gem 'minitest'
end

【问题讨论】:

  • 您能否检查Gemfile.lock 以查看使用了哪个版本的rack gem?尝试将gem 'rack', '~&gt; 1.6.4' 添加到Gemfile,也许你有一个旧的错误版本。
  • 另外,试试bundle exec rackup config.ru
  • 我认为不是旧版本的问题,因为我已经在使用 rack 1.6.4。但可以肯定的是,我无论如何都尝试了你的建议,但没有运气......
  • 很奇怪。还有更多的堆栈跟踪还是只有那一行?你能不能试试不同的 ruby​​ 版本?
  • 我用完整的堆栈跟踪更新了问题

标签: ruby sinatra rack


【解决方案1】:

已在 chat 中解决 - 任何有相同问题的人的总结:

如果我将它粘贴到 VIM 中,我会得到:

undefined method `<feff>require' for

Unicode 0xFEFF 是BOM character,可能是由编辑器插入的。

【讨论】:

  • 好收获。我认为这可以说是 Rack 中的一个错误——如果存在的话,去掉 BOM 是有意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
相关资源
最近更新 更多