Skip to main content
 首页 » 编程设计

ruby-on-rails-3之Rails Engine之Gems 依赖项,如何将它们加载到应用程序中

2024年05月22日40lonelyxmas

我在这里做一个引擎,它独立工作正常。

当我将其转换为 gem 并将其加载到另一个应用程序中时,我收到许多未定义的错误,这些错误来 self 的引擎 gem 的依赖项。

这是 gem 规范:

s.add_dependency('paperclip') 
s.add_dependency('jquery-rails') 
s.add_dependency('rails3-jquery-autocomplete') 
s.add_dependency('remotipart') 
s.add_dependency('cancan') 

在应用程序中,当我进行捆绑安装时,它会列出所有这些依赖项,但当我运行应用程序时,我收到许多未定义的方法错误(例如来自回形针的 has_attachment)。看来应用程序没有加载引擎依赖项。 这是默认行为吗?我可以改变它吗? 引擎内的插件也发生了同样的事情。

如果我在应用程序 Gemfile 中手动插入这些 gem,则一切正常...

请您参考如下方法:

将它们包含在您的 gemfile 中并运行捆绑安装。然后在您的 lib/<your_engine>/engine.rb file 中要求它们。不要忘记需要 ruby​​gems

  require 'rubygems' 
  require 'paperclip' 
  require 'jquery-rails' 
  require 'rails3-jquery-autocomplete' 
  require 'remotipart' 
  require 'cancan' 

然后在你的主机应用程序(包含 gem 的应用程序)中运行捆绑安装/捆绑更新(捆绑更新对我来说很有效),然后一切都应该完美运行。您还可以通过在主机应用程序中启动控制台并输入模块名称来测试这一点,例如

Loading development environment (Rails 3.0.3) 
irb(main):001:0> Paperclip 
=> Paperclip 

希望这有帮助