无法在引擎中加载gem

时间:2012-05-21 13:08:54

标签: ruby-on-rails-3 rubygems runtime-error rails-engines

我有一个使用savon宝石的引擎。当我在引擎内的/test中运行虚拟应用程序时,一切正常,但是当我尝试在应用程序中安装并运行它作为引擎时,我收到错误:

`require': no such file to load -- savon (LoadError)

我过去通过将require "savon"添加到模型的顶部soap_model.rb来使用它来包含它。根据{{​​3}}帖子,我不应该将其添加到模型中,而是environment.rb。启动服务器时似乎没有运行environment.rb,因为它只是产生了一个新的错误

uninitialized constant EngineName::SOAP::Savon

所以我将它添加到初始化程序中,在尝试使用rails s启动服务器时产生相同的错误。

环境:

Mac OS 10.7.3
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.3.0]
Rails 3.1.4
savon (0.9.9)

注意:我当然确保捆绑安装正确运行,然后重新启动服务器。

2 个答案:

答案 0 :(得分:0)

我不知道为什么宝石表现得如此奇怪,但你可以试试这段代码:

您首先需要,然后包含

# config/initializers/application.rb
require 'savon'

include EngineName::SOAP::Savon

希望它有所帮助。

答案 1 :(得分:0)

gem包含在引擎Gemfile中,但未作为依赖项添加到gemspec中,因此在主应用程序中运行bundle install时未包含它。

将此添加到enginename.gemspec

s.add_dependency "savon"

让一切顺利。

它在虚拟应用程序中工作的原因是它与引擎共享Gemfile。