Stapsgewijs upgraden naar de pipeline van Rails-activa

Ik heb een vrij complexe Rails-webapp die bijna 4 jaar oud is :). Het is live met veel klanten die het dagelijks gebruiken, dus ik moet wat minder cavalier zijn als ik het radicaal veranderde.

Ik heb het gemigreerd naar rails 3.2.2 en nog steeds functioneel, maar er is veel code die nog steeds Scriptaculous, Prototype's Ajax-oproepen gebruikt (voor paginering bijvoorbeeld) enzovoort.

Ik wil dit langzaam migreren naar het gebruik van jQuery UJS en Coffeescript, maar ik moet deze wijzigingen stukje bij beetje doen, bij voorkeur één controller tegelijk in meerdere "releases".

Maar ik zie dat het inschakelen van assets een boolean-switch is.

Hoe heeft u uw bestaande code gemigreerd naar de pijplijn van activa zonder veel code te overtreden? Welke voorzorgsmaatregelen moet ik nemen?

3

2 antwoord

Als het niet te laat is, is hier de truc die we hebben gevonden om asset pipeline ingeschakeld te hebben, nog steeds met veel CSS en JS in de publieke map:

Om de "oude" tag-helpers voor statische bestanden te behouden, geven we ze een alias voordat ze worden overschreven door de activapijplijn. We voegen dit fragment toe boven de vereisen 'rails/all' in application.rb:

require 'rails'

ActiveSupport.on_load(:action_view) do
  alias_method :without_asset_pipeline_js,  :javascript_include_tag
  alias_method :without_asset_pipeline_css, :stylesheet_link_tag
  alias_method :without_asset_pipeline_img, :path_to_image
end

In onze zienswijze hebben we dus nog steeds toegang tot hen. Maar we zouden al onze tags moeten veranderen ... Dus we voegen een initializer toe om de 'oude' tags te herstellen en hebben de 'nieuwe' tags voorafgegaan met 'asset_' (of wat dan ook). Nu kunnen we zowel bestanden met statische bestanden openbaar maken als assets die worden beheerd door de asset-pipeline.

Voorlopig hebben we geen problemen ondervonden met deze aanpak (behalve dat het niet werkt met afbeeldingen!), Maar we zijn het begin ...

3
toegevoegd
Dit werkte voor mij, hoewel het lijkt kludgy. Ik wou dat deze functionaliteit was ingebouwd.
toegevoegd de auteur quoo, de bron

Deze afleveringen van railscasts hebben me veel geholpen.

  1. http://railscasts.com/episodes/279-understanding-the- activa-pijpleiding
  2. http://railscasts.com/episodes/282-upgrading- to-rails-3-1
  3. http://railscasts.com/episodes/318-upgrading- to-rails-3-2

De samenvatting:

Stel uw Gemfile in

group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'yui-compressor' # i'm using yui for compressor
end

verplaats je assets (javascripts, fonts, css, images, etc) naar app/assets, de mijne als volgt:

app/
  assets/
    fonts/
    images/
    javascripts/
    stylesheets/

en op de CSS wijzigt u de URL-helper in iets als font-url, image-url of assets-url. U kunt hier meer informatie vinden, https://github.com/rails/sass-rails . Misschien wilt u een staging-server gebruiken om te controleren of de assets pipeline goed werken, althans voor de statische assets die uw app biedt. Ook om ervoor te zorgen dat er een javascript-bestand meer dan eens is geladen. (Het bezorgde me al hoofdpijn toen ik een upgrade deed naar de pijplijn van assets).

hoop dat dit helpt.

2
toegevoegd