Auf der lokalen Maschine mit der Assets-Pipeline in Rails 4 und Ruby 2.0 läuft alles gut. Bei der Bereitstellung auf Heroku wird jedoch Folgendes gezeigt:
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
I, [2013-03-12T03:28:29.908234 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/rails-2ee5a98f26fbf8c6c461127da73c47eb.png
I, [2013-03-12T03:28:29.914096 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/trash-3c3c2861eca3747315d712bcfc182902.png
I, [2013-03-12T03:28:33.963234 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/application-bf2525bd32aa2a7068dbcfaa591b3874.js
I, [2013-03-12T03:28:40.362850 #912] INFO -- : Writing /tmp/build_1n6yi8lwna3sj/public/assets/application-13374a65f29a3b4cea6f8da2816ce7ff.css
Asset precompilation completed (14.36s)
Heroku scheint Dateien zu kompilieren, legt sie jedoch fehlerfrei in / tmp ab. Meine Fragen sind:
- Wie kommt es, dass Heroku Assets-Dateien nach / tmp kompiliert?
- Meine letzte Lösung bestand darin, RAILS_ENV = Produktionspaket-Exec-Rake-Assets auszuführen: lokal vorkompilieren, aber dies erzeugte eine manifest-xxxxxx.json in public / assets anstelle von manifest.yml, sodass heroku die JSON-Manifestdatei nicht erkennt. Ich habe es durch manuelles Erstellen eines Yml aus der JSON-Datei aussortiert und Heroku wurde glücklich. Wurde Herokus Ansatz veraltet?
heroku
asset-pipeline
ruby-on-rails-4
Aquajach
quelle
quelle
Antworten:
Herokus Asset-Plugins funktionieren nicht mehr, da Rails 4 keine Plugins unterstützt. Sie müssen stattdessen Herokus Edelsteine verwenden. Legen Sie dies in Ihre Gemfile:
group :production do gem 'rails_log_stdout', github: 'heroku/rails_log_stdout' gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets' end
Folgen Sie Herokus Anleitung , um mit Rails 4 zu beginnen.
Update (22.07.2013): Heroku liefert jetzt ein anderes Juwel zum Vorkompilieren von Assets.
group :production do gem 'rails_12factor' end
quelle
config.serve_static_assets = false
zutrue
.Sie müssen Rails konfigurieren, um statische Assets in der Produktion bereitzustellen: config / environment / Production.rb
AKTUALISIEREN:
In Rails 4 ist veraltet und wurde geändert durch:
config.serve_static_files = true
quelle
Da Rails 4 manifest.yml durch manifest- (Fingerabdruck) .json ersetzt hat , möchten Sie die Bereitstellung statischer Assets aktivieren.
Von den ersten Schritten mit Rails 4.x auf Heroku :
gem 'rails_12factor', group: :production
dann
und schlussendlich,
Das Problem wurde für mich behoben. Hoffe das hilft!
quelle
config.serve_static_assets = true
bedeutete, dass die CSS richtig zu bedienen begann, aber nicht die Bilder oder JS.Ich stoße genau auf das gleiche Problem.
Ich setze config.serve_static_assets = true in meiner Datei environment / Production.rb, bis Heroku das neue Manifestformat nicht mehr unterstützt.
Es ist also eine zeitliche Lösung, bis die Heroku-Unterstützung hinzugefügt wird.
quelle
app/assets/images
Verzeichnis werden immer noch nicht bereitgestellt .Nach stundenlangem Googeln, in dem mir keiner der Anleitungen zu Heroku oder die Vorschläge zu StackOverFlow geholfen haben, bin ich endlich auf diesen Blog-Beitrag gestoßen, der diesen Hinweis bot:
heroku labs:enable user-env-compile --app=YOUR_APP
Ohne dies versucht die Asset-Pipeline immer, die gesamte App zu initiieren und eine Verbindung zur Datenbank herzustellen (trotz all der Dinge, die Sie möglicherweise gelesen haben, dass Rails 4 dies jetzt länger tut). Dadurch wird Ihre Heroku-Konfiguration Rails ausgesetzt, sodass sie erfolgreich gestartet und Rake-Aufgaben wie Assets ausgeführt werden können: Vorkompilieren.
quelle
Ich musste dieses Juwel benutzen:
gem 'rails_12factor', group: :production #need this for rails 4 assets on heroku
Und in /config/environments/production.rb musste ich Folgendes einstellen:
config.assets.compile = true
Mein Verständnis ist, dass der
rails_12_factor
Edelsteinconfig.serve_static_assets = true
unter anderem setzt.quelle
In meinem Fall wurden Assets gemäß den obigen Anweisungen kompiliert, aber es wurde nicht die Bootstrap-Glyphikon 'fontawesome-webfont' ausgewählt, sodass dies für mich endlich funktionierte, nachdem ich so viele Stunden recherchiert hatte.
Edelsteindatei
gem 'rails_12factor', group: :production
Bundle installieren
config / application.rb
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif, "fontawesome-webfont.ttf", "fontawesome-webfont.eot", "fontawesome-webfont.svg", "fontawesome-webfont.woff") config.assets.precompile << Proc.new do |path| if path =~ /\.(css|js)\z/ full_path = Rails.application.assets.resolve(path).to_path app_assets_path = Rails.root.join('app', 'assets').to_path if full_path.starts_with? app_assets_path puts "including asset: " + full_path true else puts "excluding asset: " + full_path false end else false end end
Umwelt / Produktion.rb
config.serve_static_assets = true
Dann rannte ich endlich
rake assets:precompile RAILS_ENV=production
und schob es zu Heroku und das funktionierte.quelle
Dies war ein Problem mit dem Heroku Ruby Buildpack, aber heute (21.05.2013) wurde ein Update bereitgestellt. Bitte probieren Sie es aus und lassen Sie es uns wissen.
So beantworten Sie Ihre Fragen:
# 1) Dies ist die Ausgabe der Kettenräder. Dinge werden kompiliert
/tmp
und dann verschoben (siehe hier in Kettenräder ). Meines Wissens wurde dies immer so gemacht, aber erst als die Sprockets-Version in Rails aktualisiert wurde, haben wir diese neue Ausgabe vom Typ Debug erhalten.# 2) Früher
assets:precompile
wurde einemanifest.json
Datei erstellt, jetzt enthält die Manifestdatei in Rails 4 einen Fingerabdruck, der zuvor nicht erkannt wurde. Dies wurde behoben mit # 74 .quelle
Ich habe dies oben in einer meiner css.scss-Dateien im Ordner Assets / Stylesheets / hinzugefügt.
@import "font-awesome";
dann lief ..
rake assets:clean
und...
rake assets:precompile RAILS_ENV=production
quelle
In Rails 4.2.4 hat Ihre Production.rb die Zeile:
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
Das bedeutet,
gem 'rails_12factor', group: :production
es muss nicht in true geändert werden, da es über die Heroku-Umgebungsvariablen festgelegt werden kann. Sie erhalten auch eine Warnung, wenn Sie den Edelstein rails_12factor entfernen.Wenn Sie Probleme mit Assets haben , melden Sie sich bei der Heroku-Konsole an
heroku run rails console
und ermitteln Sie den Asset-Pfad für eine Dateiputs helper.asset_path("application.js")
.Ein seltsames Verhalten, das ich zwischen Entwicklung und Produktion festgestellt habe, als das Dateiende nicht angegeben wurde:
Bei einem Bild unterscheidet sich
/assets/images/image_01.jpg
die folgende Ausgabe vonasset_paths
:Entwicklung :
development > puts helper.asset_path('profile_01') => /assets/profile_01-bbd16aac5ef1d295411af44c103fcc631ab90ee94957414d4c01c3aed1055714.jpg development > puts helper.asset_path('profile_01.jpg') => /assets/profile_01-bbd16aac5ef1d295411af44c103fcc631ab90ee94957414d4c01c3aed1055714.jpg
Produktion :
development > puts helper.asset_path('profile_01') => /profile_01 development > puts helper.asset_path('profile_01.jpg') => /assets/profile_01-bbd16aac5ef1d295411af44c103fcc631ab90ee94957414d4c01c3aed1055714.jpg
Sie müssen nicht ausgeführt werden
RAILS_ENV=production rake assets:precompile
, Heroku erledigt dies für Sie während der Bereitstellung. Außerdem müssen Sie die in der Entwicklung befindlichen Assets nicht vorkompilieren und an Heroku senden.quelle
Abgesehen davon, dass Sie den Edelstein 'rails_12factor' installiert haben, müssen Sie nur Folgendes tun.
# config/application.rb config.assets.paths << Rails.root.join('vendor', 'assets')
Obwohl Rails genau weiß, was es will, muss Heroku anscheinend daran erinnert werden, den Assets-Ordner als Teil der Assets-Pfade aufzunehmen.
quelle
Verwenden Sie Bilderweiterungen
Ich hatte das gleiche Problem, aber aus einem anderen Grund.
Anstatt
<%= asset_path 'facebook-link' %>
Verwenden:
<%= asset_path 'facebook-link.png' %>
Während der erste vor Ort arbeitete, brachen meine Bilder, als ich zu Heroku drängte, und ich hatte keine Ahnung warum. Die Verwendung der vollständigen Dateierweiterung hat das Problem behoben :)
quelle
Fügen Sie dieses Juwel hinzu
gem 'rails_serve_static_assets'
https://github.com/heroku/rails_serve_static_assets
quelle
Wenn Sie Controller-spezifische Assets wie folgt verwenden:
<%= javascript_include_tag params[:controller] %> or <%= javascript_include_tag params[:controller] %>
In der Produktion müssen Sie diese dann explizit vorkompilieren (in Entwicklungsschienen werden Dateien im laufenden Betrieb kompiliert).
Siehe den offiziellen Rails-Leitfaden hier: http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets
Zum Vorkompilieren, wie in den Handbüchern erläutert (hier: http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets ), müssen Sie der Datei config / application.rb Folgendes hinzufügen
# config/application.rb config.assets.precompile << Proc.new do |path| if path =~ /\.(css|js)\z/ full_path = Rails.application.assets.resolve(path).to_path app_assets_path = Rails.root.join('app', 'assets').to_path if full_path.starts_with? app_assets_path puts "including asset: " + full_path true else puts "excluding asset: " + full_path false end else false end end
quelle
Ich denke, ich werde dies als Antwort hinzufügen, da diese Frage auf der Heroku-Support-Seite verlinkt ist, wenn Sie danach suchen
"assets"
.Dies ist hauptsächlich für Leute gedacht, die ihre App auf Rails 4 aktualisieren, aber nachdem ich diese - und viele andere SO-Beiträge - durchgesehen habe, habe ich Folgendes geändert
production.rb
:config.action_dispatch.x_sendfile_header = "X-Sendfile"
Zu:
config.action_dispatch.x_sendfile_header = nil
Ich hatte dies beim Upgrade nicht bemerkt und wie immer brauchte ich ewig, um es herauszufinden. Hoffentlich hilft es jemand anderem! Rufen Sie PatrickEm an , der dasselbe in seiner Frage gefragt / beantwortet hat .
quelle
Dies beantwortet möglicherweise nicht die Grundursache der ursprünglichen Frage, aber ich hatte ein ähnliches Symptom mit einer anderen Grundursache.
Durch die Vorkompilierung einer JPEG-Datei wird die Dateierweiterung in JPG geändert, dh
asset_path("my_image.jpeg")
undasset_path("my_image")
hat nicht funktioniert. Entfernen Sie das "e" aus JPEG und voila, es funktioniert.Andere haben das gleiche Problem hier beschrieben: https://blazarblogs.wordpress.com/2016/04/06/rails-force-to-precompile-jpeg-to-jpg/
Ist das ein Fehler? Oder gewünschtes Verhalten? Und auch seltsam, dass es in meiner von Heroku gehosteten Produktionsumgebung nur nicht funktioniert. Vielleicht haben sie eine Art Konfiguration.
quelle