Rails 번들 설치 프로덕션 전용


87

나는 여전히 rails / ruby ​​/ bundler를 처음 사용하고 약간 혼란 스럽습니다.

우리에 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

그리고 우리 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_ENV=production bundle install(또는 bundle install --deployment)하면 여전히 개발 / 테스트 그룹의 gem을 설치합니다.

이 문제가 발생하는 이유 또는 제대로 작동하도록하려면 어떻게해야합니까?

답변:


181

--without옵션을 살펴보십시오 .

bundle install --without development test

기본적으로 Bundler는 모든 gem을 설치하고 애플리케이션은 필요한 gem을 사용합니다. Bundler 자체는 Rails와 현재 환경에 대해 아무것도 모릅니다.


3
나는에 대해 알고 --without있지만, 특히 config/application.rb(정확히 이것을 해결해야하는) 구성 지시문을 고려하고이 인용문을 고려하면 매우 우아하게 보입니다 . Rails 3은 번 들러를 지원합니다.
gingerlime

2
번들 설치 명령은 Rails와 완전히 독립적입니다. Gemfile을 살펴보고 언급 된 구성에서 애플리케이션에 실제로 필요한 라이브러리가 무엇인지는 신경 쓰지 않습니다. 실제로 Bundler.require를 건너 뛰고 모든 그룹에서 수동으로 libs를 요구할 수 있습니다. 이 경우 Rails가 Bundler와 더 잘 통합 될 수 있다는 데 동의하지만 그렇지 않습니다.
Simon Perepelitsa

2
내가 참조. 그래서 rails는 bundler (예 : in config/application.rband also config/boot.rb)에 대해 알고 있지만 bundler는 rails에 대해 아무것도 모릅니다 ... Gemfile 만 읽고 해당 rails 파일을 사용하지 않습니다. 마침내 동전이 떨어 졌다고 생각합니다. 당신의 도움을 주셔서 감사합니다!
gingerlime 2012-06-07

실제로 이것은 Rails 앱의 환경이 아닌 Gemfile에서 '그룹'을 제외하기 때문에 우아하게 보입니다. 나는 이것이 말한 것을 알고 있지만 그렇게 생각했을 때 더 이해가되었습니다.
jaydel

1
이것이 지난 4 년 동안 변경된 것인지 확실하지 않지만 인수 --without:공백이 아닌 s 로 구분되어야 합니다. 그래서 나는 그것이되어야한다고 믿는다 bundle install --without development:test.
조 프리먼

2

대안은 bundle-onlyruby gem 을 사용하는 것 입니다. 다음과 같이 사용할 수 있습니다.

> gem install bundle-only
> bundle-only production

이 라이브러리는 번 들러 구성이나 기능 보강을 오염시키지 않습니다 Gemfile.lock. 제공 하는 기본 제공 bundle --without every other group옵션에 bundler대한 간단한 대안 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.