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

War es hilfreich?

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 . aus application.css.less zu entfernen und nur @import "my-styles"; aus weniger zu verwenden.

Vielleicht können Sie eine ähnliche Lösung mit Javascript finden ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top