it-swarm.com.de

Heroku stellt KEINE Dateien in Rails 4 für Asset-Pipelines zusammen

In lokalen Maschinen läuft alles gut, mit der Asset-Pipeline in Rails 4 und Ruby 2.0. Beim Heroku-Einsatz 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, aber ohne Fehler in/tmp abzulegen. Meine Fragen sind:

  1. Wie kommt es, dass Heroku Assets-Dateien nach/tmp kompiliert?
  2. Meine letzte Lösung war, Rails_ENV = Exec-Rake-Assets für Produktionsbündel auszuführen: lokal vorkompilieren. Dies erzeugte jedoch ein manifest-xxxxxx.json in public/assets statt in manifest.yml, sodass Heroku die JSON-Manifestdatei nicht erkennt. Ich habe das Problem gelöst, indem Sie manuell ein Yml aus der Json-Datei erstellt haben und Heroku glücklich wurde. Ist Herokus Ansatz veraltet?
77
aquajach

Die Asset Plugins von Heroku funktionieren nicht mehr, da Rails 4 keine Plugins unterstützt. Sie müssen stattdessen Herokus Edelsteine ​​verwenden. Lege dies in dein 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 Erste Schritte mit Rails 4.

Update (22.07.2013): Heroku liefert jetzt einen anderen Edelstein für die Vorkompilierung von Assets.

group :production do
  gem 'Rails_12factor'
end
102
Joseph Jaber

Sie müssen Rails konfigurieren, um statische Assets in der Produktion bereitzustellen: config /virones/production.rb

 SampleApp :: Application.configure do 
 .
 .
 .
 config.serve_static_assets = true 
 .
 .
 .
Ende

AKTUALISIEREN:

In Rails 4 ist veraltet und wurde geändert durch:

config.serve_static_files = true 
33
Israel Barba

Da Rails 4 manifest.yml durch manifest- (Fingerprint) .json ersetzt hat, sollten Sie die statische Asset-Serving-Funktion aktivieren.

Von Erste Schritte mit Rails 4.x auf Heroku :

gem 'Rails_12factor', group: :production

dann

bundle install

und schlussendlich,

git Push heroku

Das Problem wurde für mich behoben. Hoffe das hilft!

16
voss

Ich habe genau das gleiche Problem.

Ich setze config.serve_static_assets = true in meiner Datei environment/production.rb, bis Heroku das neue Manifestformat nicht unterstützt.

Es ist also eine zeitliche Lösung, bis die Heroku-Unterstützung hinzugefügt wird.

14
Boti

Nach stundenlangem Googeln, bei dem mir keiner der Guides auf Heroku oder die Vorschläge zu StackOverFlow geholfen haben, stieß ich schließlich auf diesen Blogpost , der diesen Hinweis bot:

heroku labs:enable user-env-compile --app=YOUR_APP

Andernfalls 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, tut dies Rails 4 jetzt länger). Dadurch wird Ihre Heroku-Konfiguration für Rails verfügbar, sodass sie erfolgreich booten und Rake-Tasks ausführen kann, z.

13
PatrickEm

Ich musste dieses Juwel verwenden:

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

Ich verstehe, dass der Rails_12_factor gem config.serve_static_assets = true unter anderem setzt.

7
wuliwong

In meinem Fall wurden die Assets nach den obigen Anweisungen zusammengestellt, aber es wurde nicht nach dem Bootstrap-Glyphicons 'fontawesome-webfont' ausgewählt. Das hat für mich schließlich funktioniert, nachdem ich so viele Stunden mit Nachforschungen verbracht hatte.

Gem-Datei

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 lief ich endlich rake assets:precompile Rails_ENV=production und schob es zu heroku und das hat funktioniert.

5

Dies war ein Problem mit dem Heroku Ruby Buildpack, aber heute wurde ein Update bereitgestellt (2013-05-21). Bitte probieren Sie es aus und lassen Sie es uns wissen. 

Um Ihre Fragen zu beantworten:

# 1) Dies ist ein Kettenradausgang; Dinge werden zu /tmp kompiliert 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, erhielten wir diese neue Ausgabe des Debug-Typs. 

# 2) Früher hat assets:precompile eine manifest.json-Datei erstellt, aber jetzt in Rails 4 enthält die Manifestdatei einen Fingerabdruck, der zuvor nicht erkannt wurde. Dies wurde mit # 74 behoben. 

3
catsby

In Rails 4.2.4 hat Ihre production.rb die Linie:

config.serve_static_files = ENV['Rails_SERVE_STATIC_FILES'].present?

Das bedeutet, gem 'Rails_12factor', group: :production muss nicht auf true geändert werden, da es über die Heroku-Umgebungsvariablen festgelegt werden kann. Sie erhalten auch eine Warnung, wenn Sie den Rails_12factor-Edelstein entfernen.

Wenn Sie Probleme mit Assets haben, melden Sie sich an der Heroku-Konsole heroku run Rails console an und ermitteln Sie den Asset-Pfad für eine Datei puts helper.asset_path("application.js").

Ein merkwürdiges Verhalten, das mir zwischen Entwicklung und Produktion aufgefallen ist, wenn die Dateiendung nicht angegeben ist:

Mit einem Bild /assets/images/image_01.jpg die folgende Ausgabe von asset_pathsdiffers:

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 not nicht Rails_ENV=production rake assets:precompile ausführen. Heroku führt dies während der Bereitstellung für Sie aus. Sie müssen die Assets in der Entwicklung nicht vorkompilieren und sie in Heroku verschieben. 

2
neonmate

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
2
tuneyfish

Diesen Edelstein hinzufügen gem 'Rails_serve_static_assets'

https://github.com/heroku/Rails_serve_static_assets

1
Ben

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')

Es scheint, dass, obwohl Rails genau weiß, was es will, Heroku daran erinnert werden muss, den Assets-Ordner als Teil der Asset-Pfade aufzunehmen.

1
Evolve

Wenn Sie Controller-spezifische Assets verwenden, wie in:

 <%= javascript_include_tag params[:controller] %> or <%= javascript_include_tag params[:controller] %>

In der Produktion müssen Sie diese dann explizit vorkompilieren (in der Entwicklung kompiliert Rails Dateien im laufenden Betrieb).

Den offiziellen Rails-Führer finden Sie hier: http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets

Zur Kompilierung wie in den Handbüchern beschrieben (hier: http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets ) müssen Sie der 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
0
Andrea

Bilderweiterungen verwenden

Ich hatte das gleiche Problem, aber aus einem anderen Grund.

Anstatt

<%= asset_path 'facebook-link' %>

Benutzen:

<%= asset_path 'facebook-link.png' %>

Während der erste vor Ort arbeitete, brachen meine Bilder, als ich zu Heroku stieß, und ich hatte keine Ahnung, warum. Mit der vollen Dateierweiterung wurde das Problem behoben :)

0
Phil

Ich schätze, ich füge das als Antwort hinzu, da diese Frage von der Heroku-Support-Seite verlinkt wird, wenn Sie nach "assets" suchen.

Dies ist vor allem für Leute gedacht, die ihre App auf Rails 4 aktualisieren, aber nachdem ich diese - und viele andere SO - Posts durchgegangen bin -, hat mich das schließlich in production.rb geändert:

config.action_dispatch.x_sendfile_header = "X-Sendfile"

Zu:

config.action_dispatch.x_sendfile_header = nil

Ich hatte das nicht mitbekommen, als ich ein Upgrade durchführte, und wie üblich brauchte ich dafür ewig. Hoffentlich hilft es jemand anderem! Ruf an PatrickEm , der dasselbe in seiner Frage gefragt/beantwortet hat.

0
tvalent2

Dies kann die Grundursache der ursprünglichen Frage nicht beantworten, aber ich hatte ein ähnliches Symptom mit einer anderen Grundursache.

Wenn Sie eine JPEG-Datei vorkompilieren, ändert sich die Dateierweiterung in JPG. Dies bedeutet, dass asset_path("my_image.jpeg") und asset_path("my_image") nicht funktionieren. Entfernen Sie das "e" von 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 seltsam, dass es nur in meiner Heroku-gehosteten Produktionsumgebung nicht funktioniert. Vielleicht haben sie eine Art Konfiguration.

0
Anthony Wood