为什么heroku在gemfile的开发部分跳过gems?

时间:2015-11-18 09:18:41

标签: ruby-on-rails ruby heroku gem

我遇到了应用程序错误,因此选中了heroku rails console

(master)$ heroku run rails console
Running rails console on morning-river-1349... up, run.8048
/app/vendor/ruby-2.2.3/lib/ruby/2.2.0/rubygems/dependency.rb:315:in `to_specs': Could not find 'spring' (= 1.1.3) among 58 total gem(s) (Gem::LoadError)
Checked in 'GEM_PATH=/app/vendor/bundle/ruby/2.2.0:/app/vendor/ruby-2.2.3/lib/ruby/gems/2.2.0', execute `gem env` for more information
    from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/rubygems/dependency.rb:324:in `to_spec'
    from /app/vendor/ruby-2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_gem.rb:64:in `gem'
    from /app/bin/spring:12:in `<top (required)>'
    from /app/bin/rails:4:in `load'
    from /app/bin/rails:4:in `<main>'

解决方案:我必须将spring开发部分移动到gemfile中的main。

现在应用效果很好,但是, 关于如何防止heroku跳过开发类别宝石的任何想法?
编辑:对不必要的麻烦抱歉,我读了rails 4.1的发布说明{从那时起spring被预加载},因此将它包含在gemfile中导致了不必要的问题,只是将其全部删除了。

2 个答案:

答案 0 :(得分:5)

Heroku是您的生产环境,因此您的Gemfile中的开发测试组中的Gems永远不会安装在Heroku上。

这就是Groups in Bundler的全部内容 - 您不需要使用与生产服务器上的内存相关的测试或开发相关的宝石。

Spring是一个应用程序预加载器,可以帮助您加快开发工作流程,因此您不应该在生产环境中安装Spring。尝试追踪需要Spring的内容,并首先解决该问题。

答案 1 :(得分:0)

只是添加一些上下文,问题不是 heroku ,它是bundler;

enter image description here

Bundler允许您安装特定于您正在工作的环境的宝石:

bundler install --without production staging test

这对于多种类型的依赖项(EG不同的Web服务器等)很方便:

enter image description here