【发布时间】:2012-01-27 03:28:54
【问题描述】:
标题就是问题,这里是提示它的上下文。
宝石文件:
source "http://rubygems.org"
# Specify your gem's dependencies in the gemspec
gemspec
这是机架文件的顶部:
require 'rubygems'
require "bundler/setup"
在运行 rackup 文件时会抛出一个错误:
<module:Rack>': GemName is not a class (TypeError)
为什么?因为我在写一个Rack中间件,标准布局是:
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
用相同的名称命名一个模块和一个类不是问题只要您不同时需要这两个文件。 通常,这不会发生,因为您要么需要构建 gem 的版本,要么需要运行 gem 库,只需要一个或其他。
但是,这次我决定使用 Bundler 来管理 gem 的依赖项。当通过 bundler 需要 gem 库时,它显然也会运行 gemspec。我可以很容易地“修复”它,我在 gemspec 中手动定义了版本号。
回到我的问题 - 为什么 Bundler 需要在库的运行时查看 gemspec?
捆绑器 (1.0.21)
非常感谢任何见解。
【问题讨论】: