[asset-pipeline] Rails4가 Gemfile에서 “assets”그룹에 대한 지원을 중단 한 이유

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는 프로덕션 모드에서도 커피 컴파일러가 필요합니다.

그래서이 변경의 이유는 성능 향상 때문이라고 생각합니다. 🙂


답변

AJAX ( history )로 coffeescript를 원 하므로 coffee-rails자산 그룹에서 벗어납니다.
sass-rails오작동 ( history )이므로 자산 그룹에서 이동합니다.

자산 그룹을 조정하십시오.


답변