【发布时间】:2013-12-30 18:55:08
【问题描述】:
我正在为我开发的 spree 2.1 应用程序(也是 rails 4)开发一个 rails 4 引擎(宝石名称:tax_cloud_for_spree)。这个新引擎依赖于“tax_cloud”gem。我不能要求这种依赖;尝试启动 rails 服务器会产生:
/Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/polyglot-0.3.3/lib/polyglot.rb:63:in `require': cannot load such file -- tax_cloud (LoadError)
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/polyglot-0.3.3/lib/polyglot.rb:63:in `require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:228:in `block in require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:213:in `load_dependency'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:228:in `require'
from /Users/jackryon/Documents/rails_dev/tax_cloud_for_spree/lib/tax_cloud_for_spree/engine.rb:1:in `<top (required)>'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/polyglot-0.3.3/lib/polyglot.rb:63:in `require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/polyglot-0.3.3/lib/polyglot.rb:63:in `require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:228:in `block in require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:213:in `load_dependency'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:228:in `require'
from /Users/jackryon/Documents/rails_dev/tax_cloud_for_spree/lib/tax_cloud_for_spree.rb:1:in `<top (required)>'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `each'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `block in require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `each'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/bundler-1.3.5/lib/bundler.rb:132:in `require'
from /Users/jackryon/Documents/rails_dev/purible2/config/application.rb:7:in `<top (required)>'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/railties-4.0.0/lib/rails/commands.rb:76:in `require'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/railties-4.0.0/lib/rails/commands.rb:76:in `block in <top (required)>'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
from /Users/jackryon/.rvm/gems/ruby-2.0.0-p247@purible2/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
我目前需要在“lib/tax_cloud_for_spree/engine.rb”文件顶部添加 tax_cloud gem,并且 gemspec 添加了运行时依赖项,例如:
Gem::Specification.new do |s|
...
s.add_runtime_dependency "tax_cloud", "0.2.2"
end
我的 require 似乎无法加载来自 tax_cloud 的 lib 目录。我正在使用 bundle config.local 将我的引擎路径设置为本地 git 存储库,同时我正在积极开发它。
运行“bundle show tax_cloud_for_spree”节目
~/Documents/rails_dev/tax_cloud_for_spree
并捆绑显示 tax_cloud 提供
~/Documents/rails_dev/tax_cloud_for_spree
因此,tax_cloud gem 似乎已成功安装在此 gemset 中,并且可以被要求使用。
我需要调用一些 config.autoload_paths 吗,或者我可以阻止一个初始化器挂钩来要求这个 gem?
另一个注意事项是,如果我将 tax_cloud gem 直接添加到父应用程序的 gemfile 中,我就可以启动服务器。不过,出于显而易见的原因,我更愿意让我的引擎管理自己的依赖项。我是否应该考虑编写一个生成器来将 gem 添加到父应用程序的 gemfile 中?这种方法似乎也很笨拙。
非常感谢您对此的任何帮助。
编辑
我认为我的困境的症结在于:
是否有可能需要来自 rvm gemset 的捆绑 gem..
进入一个路径到 config.local 路径的 gem..
然后加载到 Rails 应用程序中?
这将使在我的应用程序上下文中开发 gem 成为可能,同时利用第三方 gem。有人吗?
【问题讨论】:
标签: ruby-on-rails-4 gem bundler spree rails-engines