我有一个Rails 3应用程序,我正在把它变成一个Rails引擎/ gem。这个引擎有一些gem依赖项,我把它们放在它的.gemspec文件中。
我已经创建了一个新的'parent‘Rails 3应用程序,我想将我的引擎gem添加到Gemfile中,并让gem的依赖项自动’加载‘,但这对我不起作用!bundle install可以很好地安装gem依赖项,但当我启动服务器时,应用程序崩溃,因为它们没有加载。
例如,我的引擎的gemspec包含以下几行:
s.add_runtime_dependency(%q<rails>, ["= 3.0.7"])
s.add_runtime_dependency(%q<acts_as_commentable>, [">= 3.0.1"])
s.add_runtime_dependency(%q<haml>, [">= 3.1.1"])。。父Rails 3应用程序在其Gemfile中包含以下行:
source 'http://rubygems.org'
gem 'my_engine', :path => "~/src/gems/my_engine"但我得到以下错误:
undefined local variable or method `acts_as_commentable'
from /home/user/src/gems/my_engine/app/models/account.rb:66:in `<class:Account>'但是如果我将gem 'acts_as_commentable', '>= 3.0.1'添加到父Rails 3应用程序的Gemfile中,那么gem就会被加载,错误就会消失。
我使用的是Rails 3.0.8。
有人有什么建议吗?我需要改变我的引擎的加载方式吗?
发布于 2011-08-07 20:46:54
在main Rails应用程序启动期间,Bundler只需要Gemfile中直接列出的依赖项,而不需要任何子依赖项。你的库/引擎有责任在需要它的时候请求它的依赖项。你可以在你的中使用初始化器来做到这一点。
class MyRailtie < Rails::Railtie
  initializer "require stuff" do
    require "stuff"
  end
endhttps://stackoverflow.com/questions/6960078
复制相似问题