Ruby on rails 3 Rails捆绑包仅安装在生产环境中

Ruby on rails 3 Rails捆绑包仅安装在生产环境中,ruby-on-rails-3,bundler,Ruby On Rails 3,Bundler,我对rails/ruby/bundler还是新手,有点困惑 group :development, :test do gem "rspec-rails", ">= 2.7.0", :group => [:development, :test] gem 'shoulda-matchers' gem 'watchr' gem 'spork', '~> 1.0rc' gem 'spectator' gem '

我对rails/ruby/bundler还是新手,有点困惑

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end
在我们的
config/application.rb
文件中,有一个捆绑程序段:

if defined?(Bundler)         
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end
group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end
在我们的
Gemfile
中,我们使用不同的组,例如

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end
但当我运行
RAILS\u ENV=production bundle install
(或
bundle install--deployment
)时,它仍然会安装开发/测试组中的gems

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end
为什么会发生这种情况,或者如何使其正常工作?

请查看
--不带
选项:

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end
bundle安装--无需开发测试

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end

默认情况下,Bundler安装所有gems,您的应用程序使用所需的gems。Bundler本身对Rails和当前环境一无所知。

另一种解决方案是使用。它可以按如下方式使用:

group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end
> gem install bundle-only
> bundle-only production

此库不会污染您的捆绑包配置或扩充
Gemfile.lock
;它是内置的
捆绑包的一个简单替代品,没有任何其他组提供的
选项。

我知道
——没有
,但它看起来非常优雅,特别是考虑到
config/application.rb
中的那些配置指令(应该正好解决这个问题)同时考虑到这句话:Bundle安装命令完全独立于Rails。它只是查看您的GEM文件,并不关心您的应用程序在所提到的配置中实际需要什么库。事实上,您可以从任何组中手动跳过Bundler.require和require libs。我同意,Rails在这种情况下可以更好地与Bundler集成,但事实并非如此。所以我想可以公平地说,rails知道bundler(即在
config/application.rb
config/boot.rb
中),但bundler对rails一无所知。。。它只读取GEM文件,不使用任何rails文件。我想硬币终于掉下来了。谢谢你的帮助!实际上,这看起来很优雅,因为它排除了Gemfile中的“组”,而不是Rails应用程序中的环境。我知道有人说过这句话,但当我这样想的时候,它对我来说更有意义。我不确定这是不是在过去四年里发生了变化,但是
——没有
的参数应该用
s分隔,而不是空格。因此,我认为应该是
捆绑安装,而不需要开发:test
group :development, :test do
  gem "rspec-rails", ">= 2.7.0", :group => [:development, :test]
  gem 'shoulda-matchers'
  gem 'watchr'
  gem 'spork', '~> 1.0rc'
  gem 'spectator'                          
  gem 'debugger'
  gem 'wirble'
end