2011-04-15 61 views
0

在這裏工作是我的代碼捆綁不與機架應用

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

代碼工作,如果我刪除的捆綁依賴。不過,我希望捆綁器工作。此代碼是大型應用程序的一種小形式。

回答

1

Bundler.require嘗試加載寶石的lib目錄中稱爲rack-mount.rb(與寶石的名稱)的文件。這是一個Rubygems約定。對於大多數Rack Gem來說,這是行不通的,因爲它們不包含這樣的文件。

相反,它全是關於命名空間的。例如機架安裝的lib文件夾包含一個rack文件夾,其中包含一個名爲mount.rb(參見GitHub上的rack-mount/tree/master/lib)的文件。

爲了解決這個問題,你一定要告訴捆紮機需要的文件:

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

所述捆綁文件包含有關how to write a Gemfile進一步的信息。