【问题标题】:Unable to load gem in engine无法在引擎中加载 gem
【发布时间】:2012-05-21 13:08:53
【问题描述】:

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

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

我曾经通过在模型顶部添加require "savon" 来包含它,soap_model.rb 使用它。根据this 帖子我不应该将它添加到模型中,而是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)

注意:我当然已经确保 bundle install 正确运行,并重新启动了服务器。

【问题讨论】:

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


    【解决方案1】:

    我不知道为什么 Gem 表现得这么奇怪,但你可以试试那个代码:

    你必须先require,然后include它。

    # config/initializers/application.rb
    require 'savon'
    
    include EngineName::SOAP::Savon
    

    希望对你有帮助。

    【讨论】:

    • 好吧,问题是它永远不会到达include 语句,因为它在require 处崩溃。我仍然得到no such file to load。奇怪的是,它在虚拟应用程序中运行时有效,但在挂载时无效。
    【解决方案2】:

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

    将此添加到enginename.gemspec

    s.add_dependency "savon"
    

    让一切正常。

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

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2014-12-13
      • 2015-09-06
      • 2011-07-03
      • 1970-01-01
      • 2016-05-18
      相关资源
      最近更新 更多