【问题标题】:bundler not working with rack application捆绑器不适用于机架应用程序
【发布时间】:2011-08-06 16:49:56
【问题描述】:

这是我的代码

# 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

我的 Gemfile 看起来像这样

source :rubygems
gem 'rack-mount'

我做了捆绑安装,它产生了 Gemfile.lock。

当我跑步时

rackup config.ru

我收到以下错误

uninitialized constant Rack::Mount (NameError)

如果我删除对捆绑程序的依赖,该代码将起作用。但是我希望捆绑器工作。此代码是大型应用程序的小型形式。

【问题讨论】:

    标签: ruby bundler rack


    【解决方案1】:

    Bundler.require 尝试在 gem 的 lib 目录中加载一个名为 rack-mount.rb(与 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 的更多信息。

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2013-10-22
      • 1970-01-01
      • 2013-07-29
      相关资源
      最近更新 更多