ruby-on-rails - book - django tutorial deutsch pdf




Rails 3.1 Assets-Strange Serving in der Entwicklung (4)

Ich habe ein Problem mit der Rails 3.1-Assets-Pipeline. Assets sind zweimal in Entwicklung enthalten:

<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 irgendwie und enthält application.js, so dass alle Skripte zweimal enthalten sind - als einzelne Datei und in application.js

Mit vorkompilierten Assets in der Produktion ist alles in Ordnung.

Entwicklung.rb

 config.assets.compress = false
 config.assets.debug = true

produktion.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

Das hat mir nur ein Problem gemacht. Die folgenden Einstellungen sorgen dafür, dass die App funktioniert. Sie enthält jedoch die einzige Datei application.js, die ich in der Entwicklung nicht haben möchte:

config.serve_static_assets = false

Ich hatte meine Assets vorher kompiliert (scheint die Ursache zu sein).

Um es zu beheben, habe ich Folgendes getan:

  • Entfernen Sie das öffentliche / Assets-Verzeichnis, das die frühere Vorkompilierung hinzugefügt hatte.
  • Run RAILS_ENV=development rake assets:clean , um tmp / Assets zu löschen
  • Bearbeitete app / assets / application.js

Erst nachdem ich application.js bearbeitet habe, habe ich einen Fehler festgestellt und dann korrigiert, dass die in den Seiten enthaltene applciation.js nicht die vollständige, vorkompilierte application.js war.

Ich bin mir nicht sicher, ob all das getan werden muss. Ich habe auch meinen Server auf dem Weg neu gestartet.


Fügen Sie Folgendes zu development.rb hinzu:

config.serve_static_assets = false

... und dann leeren Sie Ihren Browser-Cache ( Update basierend auf Kommentaren )

Die statischen Assets beziehen sich auf vorkompilierte Assets in öffentlichen / Assets, bei denen rake assets:precompile werden.

Was passiert, ist, dass alles, was in öffentlichen / Assets vorhanden ist, alles in App / Assets überschreibt, wenn Sie sie bedienen. So wird public / assets / application.js geladen, wenn das js-Tag app / assets / application.js identifizieren will.


Sobald Sie / public / assets loswerden, müssen Sie auch den Browser-Cache leeren.


Von dieser (wieder) gestolpert, - vergessen Sie nicht, eine BLANK LINE hinter all Ihren //= require Anweisungen am Ende Ihrer application.js hinzuzufügen!





asset-pipeline