標題是問題,這裏是提示它的上下文。Bundler:爲什麼它要求「bundler/setup」讀取gemspec?
的Gemfile中:
source "http://rubygems.org"
# Specify your gem's dependencies in the gemspec
gemspec
這裏是rackup文件的頂部:
require 'rubygems'
require "bundler/setup"
在運行rackup文件中的錯誤被拋出:
<module:Rack>': GemName is not a class (TypeError)
爲什麼?因爲我寫了一塊機架中間件,標準佈局是:
lib/
rack/
gem_name.rb
gem_name/
version.rb
gem_name.rb將包含:
module Rack
class GemName
version.rb將包含:
module Rack
module GemName
VERSION = "0.0.1"
最後,gem_name.gemspec將包含:
require "rack/flash-in-the-pan/version"
#...
s.version = Rack::GemName::VERSION
只要不需要兩個文件同時命名模塊和同名的類別不是問題。通常,這不會發生,因爲您需要用於構建寶石的版本,或者您需要運行寶石庫,只需要一個或其他獲取。
但是,這次我決定使用Bundler來管理gem的依賴關係。當通過捆綁器需要寶石庫時,它顯然也會運行gemspec。我可以很容易地「修復」它,我在gemspec中手工定義版本號。
所以回到我的問題 - 爲什麼Bundler需要在庫的運行時查看gemspec?
打包商(1.0.21)
任何有識之士都非常感謝。
感謝您的回覆。我發現這個http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/(在你回答之後),它也解釋了什麼和什麼地方,但我認爲「Gemfile不包含元數據,軟件包中的文件列表,軟件包公開的可執行文件或者應該放在加載路徑上的目錄,這是一個奇怪的參數,這些超出了bundler的範圍」。這不是我的經驗,特別是如果你有一個命令,如「require」bundler/setup「'。再次感謝回覆和提示。 – iain 2012-02-08 20:43:14