Rails 3.1 Static Asset - Muss Vermögenswerte nach Vorkompilieren für Produktionen?
-
27-10-2019 - |
Frage
Mein Verständnis der neuen Rails 3.1 Asset Pipeline im Produktionsmodus lautet wie folgt:->
- config.action_controller.asset_host =
"https://mybucket.s3.amazonaws.com"
- config.assets.compile = false
app/assets
werden in Repo untersucht- Bündel -Exec -Rake -Assets: Präkompile und Synchronisierung mit S3 (alle Vermögenswerte)
public/assets
wird nicht in Repo eingecheckt
Bei all den oben genannten dachte ich, Rails würde nach allen Vermögenswerten auf S3 suchen und ich brauche sie nicht im Repository. Zumindest brauche ich das nicht vorkompiliert Vermögenswerte in public/assets
im Repo.
Ich habe das auf Heroku gefunden, wenn nicht config.assets.compile = true
, Es findet das vorkompilierte Vermögen nicht auf S3. Und Heroku muss Führen Sie eine Kompilienphase für alle Assets durch, servieren Sie sie jedoch aus S3. Betrieb heroku run rake assets:precompile
tut nicht in die Hocke. Der Produktionsprozess wird alles wieder zusammenstellen.
Huh? Das macht für mich keinen Sinn.
Ich würde für mich Sinn machen, dass Sie Ihr Repo nicht mit Bildern füllen müssen. Lassen Sie Ihr CDN die Arbeit erledigen.
Ich habe das Gefühl, dass dies falsch ist. Hab ich recht oder nicht?
Lösung
Wenn Sie diesen Satz haben:
config.assets.compile = false
Es werden keine Anträge auf Vermögenswerte an Kraftfahrzeuge weitergegeben, die zugestellt werden müssen. Es wird erwartet, dass die Dateien irgendwo vorkompiliert werden.
Probier das aus Asset Pipeline Setup Guide Auf der Heroku -Website gibt es ein spezielles Setup, um es zum Laufen zu bringen.
Andere Tipps
Auf jeden Fall auschecken asset_sync auf Github. Oder unser Heroku Dev Center -Artikel über Verwenden eines CDN -Asset -Hosts mit Rails 3.1 auf Heroku.
Die Probleme mit Umgebungsvariablen wurden kürzlich von einem Heroku Labs -Plugin gelöst, das Ihre Anwendung macht heroku config
Variablen, die während der Kompilierungszeit zugänglich sind. Um dies zu aktivieren, lesen Sie über die user_env_compile Plugin. Die Mittel, die Sie nicht mehr laufen müssen heroku run rake assets:precompile
Nach Bereitstellung einer App.
Ebenfalls. Es gibt eine ziemlich große Leistungsverbesserung bei der Verwendung asset_sync Vs lassen Ihre Anwendung faul in der Produktion oder dem Servieren von Vorkompilieren direkt von Ihren App -Servern zusammenarbeiten. Das würde ich jedoch sagen. Ich schrieb es.
- Mit ASSET_SYNC und S3 können Sie Vermögenswerte vorkompilieren, was bedeutet
- Sie können nur das benötigen :Vermögenswerte Bündel in application.rb auf vorkompilen und Speicher in der Produktion speichern
- Ihre App -Server werden nie für Vermögensanfragen getroffen. Sie können teure Rechenzeit verbringen, wissen Sie. Computer.
- Best Practice HTTP -Cache -Header sind standardmäßig eingestellt
- Sie können die automatische GZIP -Komprimierung mit einer zusätzlichen Konfiguration aktivieren
Aus Gründen, die ich nie verstehen werde, kann ich die obige Antwort nicht als nützlich markieren - aber ich hatte das gleiche Problem mit meinem Vermögen bei Amazon S3 und meiner App, die nach Heroku bereitgestellt wurde.
Einfach in "public/assets/manifest.yml" einchecken, löste die Fehler von "Asset, das nicht vorkompiliert" bei Heroku gelöst wurde.
Einstellen meiner Produktion.RB -Datei auf 1) anpassen 1) config.assets.precompile += %w( *.js *.css )
2) config.serve_static_assets = true
und 3) config.assets.compile = true
Hat der Trick für mich gemacht.
Bevor diese ... in meiner Entwicklungsumgebung alle JS / CSS -Vermögenswerte geladen hatten, fehlte sie jedoch die Produktion auf Heroku.
Siehe auch: Rails Javascript Asset fehlt nach vorkompilen
Lassen Sie mich Ihnen einen großen Hinweis geben, machen Sie es den offiziellen Heroku -Weg:
http://devcenter.heroku.com/articles/cdn-asset-host-ails31
https://github.com/rumblelabs/asset_sync
Es wird alles für Sie tun, Heroku wird vorkompilieren und dann kopiert das Juwel asset_sync es in Ihr S3 -Verzeichnis und die URL_HELPERS funktionieren nur. Ich nehme an, der Nachteil ist, dass Sie die Vorkompilierungsphase ausführen müssen (aber es kopiert nur, wenn sich etwas ändert) und müssen Ihre Vermögenswerte in Ihrem Git -Repo speichern.
Ich denke, was passiert, ist, dass es nach dem Manifest.yml sucht, um zu wissen, ob Vermögenswerte zusammengestellt wurden. Da diese Datei standardmäßig in der Öffentlichkeit/Vermögenswerte befindet und Sie dies nicht in Ihr Repo überprüfen, wird davon ausgegangen, dass die Vermögenswerte nicht zusammengestellt wurden. Ändern Sie den Speicherort der Datei in config/environments/production.rb
und prüfen Sie, ob dies das Problem behebt