我有一些常见的代码,我想在我的几个rails应用程序之间共享。
我已经像这样生成了我的宝石:
bundle gem document-common
我的gemspec看起来像这样:
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'document_common/version'
Gem::Specification.new do |spec|
spec.name = "document_common"
spec.version = DocumentCommon::VERSION
spec.authors = ['Author']
spec.email = ['test@domain.com']
spec.summary = 'Common Models and Lib'
spec.description = 'Common Models and Lib'
spec.homepage = 'google.com'
spec.license = 'WTFPL'
spec.files = Dir["{app,config,db,lib}/**/*", "LICENSE", "Rakefile", "README.rdoc"]
spec.test_files = Dir["spec/**/*"]
spec.test_files.reject! { |file| file.match(/[.log|.sqlite3]$/) }
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.11"
spec.add_development_dependency "rake", "~> 10.0"
end
在我的lib文件夹中,我有这个:
document_common
document_common.rb
文件夹document_common
和ruby文件document_common.rb
,ruby文件包含以下内容:
require 'document_common/version'
module DocumentCommon
# Your code goes here...
end
然后在document_common
内,有version.rb
个内容:
module DocumentCommon
VERSION = '0.1.0'
end
并且document.rb
包含以下内容:
module DocumentCommon
class Document < ActiveRecord::Base
end
end
所以我把这个宝石推到了我的git repo。然后我将这个gem信息添加到我的Gemfile中,在rails 4应用程序中进行捆绑安装,但当我引用DocumentCommon::Document
时,我收到此错误:
NameError: uninitialized constant DocumentCommon::Document
但是,如果我检索有关版本DocumentCommon::VERSION
的信息,我会收到任何错误并获得实际版本。另外,当我DocumentCommon.constants
时,我得到[:VERSION]
。我在这做错了什么?如何在我的主要rails应用程序中访问DocumentCommon::Document
模型?
答案 0 :(得分:2)
你可以使用自动加载,检查设计gem正是这样做的:
https://github.com/plataformatec/devise/blob/master/lib/devise.rb