Ruby on rails 3 Rails捆绑包仅安装在生产环境中
我对rails/ruby/bundler还是新手,有点困惑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 '
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