W Rails 3 klejnoty używane wyłącznie do generowania aktywów w potoku aktywów zostały prawidłowo umieszczone w assets
grupie 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
Teraz, zgodnie z (wciąż w toku) dokumentacją aktualizacji :
Rails 4.0 usunął grupę aktywów z Gemfile. Podczas aktualizacji musisz usunąć tę linię z pliku Gemfile.
Rzeczywiście, tworzenie nowego projektu z RC1 daje plik Gemfile z klejnotami związanymi z aktywami zawartymi domyślnie poza dowolną grupą:
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
...
Czy to oznacza, że te klejnoty będą teraz domyślnie dołączane do kompilacji produkcyjnych? Jeśli tak, dlaczego zmiana zdania? Czy Rails 4 zmierza w kierunku dynamicznego generowania aktywów w produkcji?
asset-pipeline
ruby-on-rails-4
jemmons
źródło
źródło
RAILS_GROUPS=assets
(zobaczRails.groups
) przed poleceniem prekompilowania zasobów w środowisku produkcyjnym w środowisku kompilacji.Odpowiedzi:
Wcześniej grupa aktywów istniała, aby uniknąć niezamierzonej kompilacji na żądanie w produkcji. Ponieważ Rails 4 już tak się nie zachowuje, sensowne było usunięcie grupy zasobów.
Jest to wyjaśnione bardziej szczegółowo w zatwierdzeniu, które to zmieniło. Wyciągnąłem kilka cytatów z rzeczywistą odpowiedzią.
źródło
Rails 4 próbują zmusić Cię do prekompilacji zasobów przed wdrożeniem. Musisz wstępnie skompilować swoje zasoby z
I dlaczego? Znalazłem to w przewodniku:
(Źródło: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )
Ale wiele razy będziesz musiał używać tych perełek „aktywów” w produkcji ... na przykład, jeśli używasz pliku js.coffee w katalogu views, to Rails również potrzebuje kompilatora kawy w trybie produkcyjnym.
Więc myślę, że powodem tej zmiany jest poprawa wydajności ... i wygląda też na prostszą. :)
źródło
assets
grupę, a nie pozbycie się go (jeśli aktywa są skompilowane, wtedy te kamienie nie są potrzebne w produkcji i nie powinny być uwzględniane przez Bundler). I tak, może użyłbyś klejnotu jakcoffee-rails
w produkcji ... ale tak było też w Rails 3, prawda? Rails 3 są domyślnie umieszczanecoffee-rails
wassets
grupie. Dlaczego więc zmiana na Rails 4?Chcemy Coffeescript z AJAX ( historią ), więc
coffee-rails
wyprowadzamy się z grupy aktywów.sass-rails
źle się zachowuje ( historia ), więc wychodzi z grupy aktywów.Ax grupa aktywów.
źródło
Bundler.require :assets
nie jest uruchamiany. To nie jest uzasadnienie, aby usunąć grupę aktywów. Nie chcę therubyracer, libv8 et c. na produkcji, dlaczego ktokolwiek to robi? Szablon kawy można skompilować do szablonu JS i nie ma sensu kompilować go za każdym razem, gdy podstawiana jest nowa wartość. Nie ma sensu brać tego całego ciężaru na produkcję.