bundler无法使用机架应用程序

时间:2011-04-15 23:32:41

标签: ruby bundler rack

这是我的代码

# 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的依赖,代码就可以工作。但是我希望捆绑工作。此代码是一种小型的大型应用程序。

1 个答案:

答案 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

的更多信息