Rails 3.1 Assets - Seltsamer Dienst in der Entwicklung
-
27-10-2019 - |
Frage
Ich habe ein Problem mit der Rails 3.1-Assets-Pipeline. Assets werden zweimal in die Entwicklung einbezogen:
<script src="/assets/main_new.js?body=1" type="text/javascript"></script>
<script src="/assets/pagenav.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.controller.js?body=1" type="text/javascript"></script>
<script src="/assets/tours.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
Rails kompiliert und enthält application.js , sodass alle Skripte zweimal enthalten sind - als einzelne Datei und in application.js
Mit vorkompilierten Assets in der Produktion ist alles in Ordnung.
development.rb
config.assets.compress = false
config.assets.debug = true
production.rb
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress both stylesheets and JavaScripts
config.assets.compress = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :scss
config.assets.compile = false
config.assets.digest = true
application.rb
config.assets.enabled = true
Lösung
Fügen Sie der Datei development.rb Folgendes hinzu:
config.serve_static_assets = false
... und dann den Browser-Cache leeren ( Update basierend auf Kommentaren )
Die statischen Assets beziehen sich auf vorkompilierte Assets in public / Assets. Dort werden sie vom rake assets:precompile
abgelegt.
Was passiert ist, dass alles, was in öffentlichen / Assets vorhanden ist, alles in App / Assets überschreibt, wenn Sie sie bedienen.Daher wird public / assets / application.js geladen, wenn das js-Tag beabsichtigt, app / assets / application.js zu identifizieren
Andere Tipps
Sobald Sie / public / Assets entfernt haben, müssen Sie auch den Browser-Cache leeren.
Das hat mir nur ein Problem verursacht.Wenn Sie Folgendes einstellen, funktioniert die App, enthält jedoch die einzelne Datei application.js, die ich in der Entwicklung nicht verwenden möchte:
config.serve_static_assets = false
Ich hatte mein Vermögen zuvor vorkompiliert (scheint die Ursache zu sein).
Um das Problem zu beheben, habe ich Folgendes getan:
- Entfernen Sie das Verzeichnis public / assets, das durch die frühere Vorkompilierung hinzugefügt wurde.
- Führen Sie
RAILS_ENV=development rake assets:clean
aus, um tmp / assets zu löschen - Bearbeitete App / Assets / Application.js
Erst nachdem ich application.js so bearbeitet und fehlerhaft gemacht und dann korrigiert habe, war die auf den Seiten enthaltene applciation.js nicht die vollständige, vorkompilierte application.js.
Ich bin mir nicht sicher, ob all dies getan werden muss.Unterwegs habe ich auch meinen Server neu gestartet.
Wurde dadurch (noch einmal) gestolpert - vergessen Sie nicht, nach all Ihren //= require
-Anweisungen am Ende Ihres application.js
eine BLANK LINE hinzuzufügen!
Ich füge das gleiche Problem mit weniger Dateien hinzu.
Hier aus der Dokumentation :
Im Entwicklungsmodus werden Assets in der Reihenfolge als separate Dateien bereitgestellt Sie werden in der Manifestdatei angegeben.
Meine Lösung bestand darin, die Zeile
*= require_tree .
ausapplication.css.less
zu entfernen und nur@import "my-styles";
aus weniger zu verwenden.Vielleicht können Sie eine ähnliche Lösung mit Javascript finden ...