Dlaczego Rails4 porzucił wsparcie dla grupy "aktywa" w pliku Gemfile

W Rails 3, gemy używane wyłącznie do generowania aktywów w potoku aktywów zostały prawidłowo umieszczone w grupieassets pliku 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) dokumentacja aktualizacji :

Rails 4.0 usunął grupę aktywów z Gemfile. Musisz usunąć tę linię z pliku Gemfile podczas aktualizacji.

Oczywiście, utworzenie nowego projektu z RC1 daje plik Gemfile z domyślnie włączonymi klejnotami związanymi z aktywami poza dowolna grupa:

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, to skąd ta zmiana? Czy Rails 4 zmierza w kierunku dynamicznego generowania aktywów w produkcji?

Author: jemmons, 2013-05-06

3 answers

Wcześniej grupa aktywów istniała, aby uniknąć niezamierzonej kompilacji na żądanie w produkcji. Ponieważ Rails 4 nie zachowuje się już w ten sposób, sensowne było usunięcie grupy zasobów.

Jest to wyjaśnione bardziej szczegółowo w commit , który to zmienił. Wyciągnąłem kilka cytatów z rzeczywistą odpowiedzią.

Niektóre perełki mogą być potrzebne (w produkcji) jak coffee-rails, jeśli używasz szablonów kawy i fakt, że teraz aktywa nie są wstępnie skompilowane na żądanie w produkcji.

(nie precompilowane na żądanie w produkcji) oznacza, że jeśli masz te klejnoty w środowisku produkcyjnym w 3.2.x i zapomnij o prekompilacji, Rails zrobi dokładnie to, co robi w rozwoju, wstępnie skompiluje zasoby, które zostały poproszone. Nie jest to już prawdą w Rails 4, więc jeśli nie skompilujesz zasobów za pomocą zadań, otrzymasz 404, gdy zasoby są żądaniami.

 95
Author: Filipe Giusti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-25 14:30:03

Rails 4 próbuje zmusić cię do prekompilacji zasobów przed wdrożeniem. Musisz wstępnie skompilować swoje aktywa za pomocą

$ RAILS_ENV=production bundle exec rake assets:precompile
I dlaczego? Znalazłem to w Poradniku:

Domyślnie Rails zakłada, że zasoby zostały wstępnie skompilowane i będą serwowane jako zasoby statyczne przez serwer WWW.

(Źródło: http://edgeguides.rubyonrails.org/asset_pipeline.html#in-production )

Ale wiele razy musisz użyć tych klejnotów "aktywów" w produkcji... na przykład, jeśli używasz js.plik coffee w katalogu views, a następnie Rails potrzebuje kompilatora coffee również w trybie produkcyjnym.

Więc myślę, że powodem tej zmiany jest poprawa wydajności... i wygląda bardziej prosto. :)

 13
Author: Zoltan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-07 13:49:50

Chcemy coffeescript z AJAX (history ), więc coffee-rails wychodzi z grupy aktywów.
sass-rails misbehaves (history ), więc wychodzi z grupy aktywów.

Axe the assets group.

 3
Author: mockturtl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 23:25:20