这是我的代码
# config.ru
require "rubygems"
require "bundler"
Bundler.setup
Bundler.require
FooApp = Proc.new do |env|
[200, {'Content-Type' => 'text/plain'}, "foo"]
end
Routes = Rack::Mount::RouteSet.new do |set|
set.add_route FooApp, { :request_method => 'GET', :path_info => %r{^/foo$} }, {}, :foo
end
run Routes
My Gemfile看起来像这样
source :rubygems
gem 'rack-mount'
我做了捆绑安装,它生成了Gemfile.lock。
当我跑步时
rackup config.ru
我收到以下错误
uninitialized constant Rack::Mount (NameError)
如果我删除对bundler的依赖,代码就可以工作。但是我希望捆绑工作。此代码是一种小型的大型应用程序。
答案 0 :(得分:1)
Bundler.require
尝试在gem的rack-mount.rb
目录中加载名为lib
的文件(与gem的名称相同)。这是一个Rubygems惯例。对于大多数Rack gem来说,这不起作用,因为它们不包含这样的文件。
相反,它完全取决于命名空间。例如,rack-mount的lib
文件夹包含一个rack
文件夹,其中包含一个名为mount.rb
的文件(请参阅GitHub上的rack-mount/tree/master/lib)。
要解决此问题,您必须告诉Bundler需要哪个文件:
source :rubygems
gem "rack-mount", :require => "rack/mount"
Bundler文档包含有关how to write a Gemfile。
的更多信息