【问题标题】:Capistrano & Ruby 'require' LoadError: cannot load such file -- 'net-http-persistent'Capistrano & Ruby 'require' LoadError: 无法加载此类文件 -- 'net-http-persistent'
【发布时间】:2016-08-10 20:26:40
【问题描述】:

我有一个自定义 gem,它只发布到 Github,而不是 ruby​​gems.org,并更新了它的依赖项以包含 gem 'net-http-persistent'。

我遵循了我之前为其他依赖项所做的相同格式(使用 .gemspec 文件),bundle update 仍然可以正常工作。但是,现在当我尝试使用 Capistrano 将主应用程序(包括我的自定义 gem)部署到我的暂存服务器时,我遇到了这个错误:

DEBUG [20cee5f9] Command: cd /var/www/inside/releases/20160418182647 && ( RAILS_ENV=staging ~/.rvm/bin/rvm 2.1.0@rails4.1 do bundle exec rake assets:precompile )
DEBUG [20cee5f9]    rake aborted!
DEBUG [20cee5f9]    LoadError: cannot load such file -- net-http-persistent
DEBUG [20cee5f9]    /var/www/inside/shared/bundle/ruby/2.1.0/bundler/gems/series25-5465e368ff56/lib/series25.rb:4:in `require'
DEBUG [20cee5f9]    /var/www/inside/shared/bundle/ruby/2.1.0/bundler/gems/series25-5465e368ff56/lib/series25.rb:4:in `<top (required)>'
DEBUG [20cee5f9]    /home/charles/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in `require'
DEBUG [20cee5f9]    /home/charles/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
DEBUG [20cee5f9]    /home/charles/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in `each'
DEBUG [20cee5f9]    /home/charles/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in `block in require'
DEBUG [20cee5f9]    /home/charles/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in `each'
DEBUG [20cee5f9]    /home/charles/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in `require'
DEBUG [20cee5f9]    /home/charles/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.2/lib/bundler.rb:132:in `require'
DEBUG [20cee5f9]    /var/www/inside/releases/20160418182647/config/application.rb:9:in `<top (required)>'
DEBUG [20cee5f9]    /var/www/inside/releases/20160418182647/Rakefile:4:in `require'
DEBUG [20cee5f9]    /var/www/inside/releases/20160418182647/Rakefile:4:in `<top (required)>'
DEBUG [20cee5f9]    (See full trace by running task with --trace)
cap aborted!

我已经能够通过简单地运行rake assets:precompile 在本地复制错误。我尝试了许多潜在的修复方法,包括在本地安装 net-http-persistent 并将其添加到我的 Gemfile 中,但无济于事。

这是自定义 gem 当前在我的 gemfile 中的样子:

gem 'series25', git: 'git://github.com/chapmanu/series25.git'

我有点匆忙地提出了这个问题,所以如果我遗漏了任何相关信息,请告诉我。提前感谢您的帮助!

【问题讨论】:

  • bundle list 是否显示已安装?您确定使用相同版本的 Ruby 来安装和运行它吗?
  • 您可能需要升级 gem 的版本,以便更新捆绑的版本。或者尝试重新安装 gem。
  • @tadman 在登台服务器上,我的自定义 gem 和 net-http-persistent 都显示在 bundle list 如果你的意思是问我部署的本地 ruby​​ 版本是和我服务器上的版本一样,那么是的。两者都在 2.1.0
  • @max-pleaner 我想知道版本控制是否对它有影响。我根本没有碰过版本,但我可以弄清楚如何去做。我已经尝试在服务器和本地重新安装 gem。
  • @homeofmatt 我在构建 gem 时发现需要以令人讨厌的频率执行版本颠簸和 git 提交。另一种方法可能是引用 Gemfile 中的本地路径,它应该热重载代码。

标签: ruby git rubygems rake capistrano


【解决方案1】:

事实证明,虽然 gemspec 文件需要 spec.add_dependency 'net-http-persistent',但我放置所有 require 语句的文件(在我的情况下,在大多数情况下类似于 lib/mygem.rb)需要 require 'net/http/persistent'

当然是针对我使用这个 gem 的情况,但希望对在某些时候遇到类似问题的其他人有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多