Frage

Mein Verständnis der neuen Rails 3.1 Asset Pipeline im Produktionsmodus lautet wie folgt:->

  1. config.action_controller.asset_host = "https://mybucket.s3.amazonaws.com"
  2. config.assets.compile = false
  3. app/assets werden in Repo untersucht
  4. Bündel -Exec -Rake -Assets: Präkompile und Synchronisierung mit S3 (alle Vermögenswerte)
  5. 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?

War es hilfreich?

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

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