无法从我的gem加载类到我的rails应用程序

时间:2016-01-14 18:08:05

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems

我有一些常见的代码,我想在我的几个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模型?

1 个答案:

答案 0 :(得分:2)

你可以使用自动加载,检查设计gem正是这样做的:

https://github.com/plataformatec/devise/blob/master/lib/devise.rb