пакет не работает с приложением стойки - PullRequest
0 голосов
/ 16 апреля 2011

Вот мой код

# 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)

Код работает, если я удаляю зависимость от компоновщика.Однако я хочу, чтобы bundler работал.Этот код представляет собой небольшую форму большого приложения.

1 Ответ

1 голос
/ 16 апреля 2011

Bundler.require пытается загрузить файл с именем rack-mount.rb (такой же, как имя драгоценного камня) в каталоге lib драгоценного камня. Это соглашение по Rubygems. С большинством Rack gem это не работает, потому что они не содержат такого файла.

Вместо этого все дело в пространстве имен. Папка lib для монтажа в стойку, например, содержит папку rack, в которой содержится файл с именем mount.rb (см. mount-mount / tree / master / lib на GitHub).

Чтобы решить проблему, вы должны указать Bundler, какой файл требовать:

source :rubygems
gem "rack-mount", :require => "rack/mount"

Документация Bundler содержит дополнительную информацию о как написать Gemfile .

...