Rails 3에서는 자산 파이프 라인에서 자산을 생성하기 위해 독점적으로 사용 된 gem assets
이 Gemfile 그룹에 올바르게 배치되었습니다 .
...
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
end
이제 (아직 진행중인) 업그레이드 문서 에 따르면 :
Rails 4.0은 Gemfile에서 자산 그룹을 제거했습니다. 업그레이드 할 때 Gemfile에서 해당 줄을 제거해야합니다.
물론 RC1로 새 프로젝트를 만들면 모든 그룹 외부에 기본적으로 포함 된 자산 관련 gem이있는 Gemfile이 생성됩니다.
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0.rc1'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0.rc1'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
...
이것은 이러한 gem이 이제 기본적으로 프로덕션 빌드에 번들됨을 의미합니까? 그렇다면 왜 마음이 바뀌 었습니까? Rails 4는 프로덕션에서 동적 자산 생성으로 이동하고 있습니까?
답변
이전에는 프로덕션에서 의도하지 않은 주문형 컴파일을 방지하기 위해 자산 그룹이 존재했습니다. Rails 4는 더 이상 그렇게 작동하지 않으므로 자산 그룹을 제거하는 것이 합리적이었습니다.
이것은 그것을 변경 한 커밋 에서 더 자세히 설명됩니다 . 실제 답변으로 인용문을 추출했습니다.
커피 템플릿을 사용하는 경우 커피 레일과 같은 일부 보석이 필요할 수 있습니다 (프로덕션에서 더 이상 요청시 자산이 사전 컴파일되지 않는다는 사실).
(프로덕션에서 사전 컴파일되지 않음) 3.2.x의 프로덕션 환경에 해당 gem이 있고 사전 컴파일하는 것을 잊은 경우 Rails가 개발에서 수행하는 작업을 정확히 수행하고 요청 된 자산을 사전 컴파일합니다. 이것은 Rails 4에서 더 이상 사실이 아니므로 작업을 사용하여 자산을 사전 컴파일하지 않으면 자산이 요청 일 때 404가 표시됩니다.
답변
Rails 4는 배포 전에 자산을 미리 컴파일하도록 강제합니다. 자산을 미리 컴파일해야합니다.
$ RAILS_ENV=production bundle exec rake assets:precompile
그리고 왜? 가이드에서 찾았습니다.
기본적으로 Rails는 자산이 사전 컴파일되어 웹 서버에 의해 정적 자산으로 제공된다고 가정합니다.
(출처 : http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
하지만 프로덕션에서 이러한 ‘assets’gem을 사용해야하는 경우가 많습니다. 예를 들어 뷰 디렉토리에서 js.coffee 파일을 사용하는 경우 Rails는 프로덕션 모드에서도 커피 컴파일러가 필요합니다.
그래서이 변경의 이유는 성능 향상 때문이라고 생각합니다. 🙂