Pregunta Heroku NO compila archivos en las tuberías de activos en Rails 4


Todo va bien en la máquina local con canalización de activos en Rails 4 y Ruby 2.0. Pero cuando se despliega en heroku, se muestra que:

-----> 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 parece compilar archivos pero lo coloca en / tmp sin ningún error. Mis preguntas son:

  1. ¿Cómo es que Heroku compila archivos de activos en / tmp?
  2. Mi última solución fue ejecutar RAILS_ENV = activos de ejecución ejecutor del paquete: precompilar localmente, pero esto generó un manifest-xxxxxx.json en public / assets, en lugar de manifest.yml, de modo que heroku no detecta el archivo de manifiesto JSON. Lo resolví creando manualmente un yml del archivo json y heroku se puso feliz. ¿El enfoque de heroku ha quedado obsoleto?

77
2018-03-12 06:14


origen


Respuestas:


Los complementos de activos de Heroku ya no funcionan porque Rails 4 no admite complementos. Necesitas usar gemas de activos de Heroku en su lugar. Coloque esto en su 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

Seguir Guía de Heroku sobre cómo empezar con Rails 4.

Actualización (22/07/2013): Heroku ahora proporciona una gema diferente para precompilar los activos.

group :production do
  gem 'rails_12factor'
end

101
2018-05-15 17:34



Necesita configurar Rails para servir activos estáticos en production: config / environments / production.rb

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

ACTUALIZAR:

En Rails 4 está en desuso, y ha sido cambiado por:

config.serve_static_files = true 

33
2018-05-21 21:48



Ya que rails 4 reemplazó manifest.yml con manifest- (huella dactilar) .json, querrá habilitar la publicación de activos estáticos.

De Comenzando con Rails 4.x en Heroku:

gem 'rails_12factor', group: :production

entonces

bundle install

y finalmente,

git push heroku

Solucionado el problema para mí. ¡Espero que esto ayude!


16
2018-06-29 00:42



Me encuentro exactamente en el mismo problema.

Configuré config.serve_static_assets = true en mi archivo environments / production.rb hasta que heroku no sea compatible con el nuevo formato de manifiesto.

Por lo tanto, es una solución temporal hasta que se agregue el soporte heroku.


14
2018-03-16 11:33



Después de horas de google en el que ninguna de las guías de Heroku o las sugerencias de StackOverFlow me ayudaron, finalmente me topé con esta publicación en el blog que ofreció esta pista:

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

Sin esto, el inventario de activos siempre tratará de iniciar toda la aplicación y conectarse a la base de datos (a pesar de todo lo que haya leído que rails 4 ahora hace más). Esto expone tu configuración de Heroku a Rails para que pueda iniciarse correctamente y ejecutar tareas de rake como assets: precompilar.


13
2017-08-31 07:33



Necesitaba usar esta joya:

gem 'rails_12factor', group: :production #need this for rails 4 assets on heroku

Y en /config/environments/production.rb necesitaba configurar:

config.assets.compile = true

Mi entendimiento es que el rails_12_factor conjuntos de gemas config.serve_static_assets = true, entre otras cosas.


7
2017-07-24 17:54



En mi caso, los activos se compilaron siguiendo las instrucciones anteriores, pero no estaba recogiendo la fuente fontawesome-webfont de los glyphicons de arranque, así que esto funcionó para mí finalmente después de perder tantas horas investigando.

Archivo de gemas

gem 'rails_12factor', group: :production

paquete de instalación

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

entorno / producción.rb

config.serve_static_assets = true

Entonces finalmente, corrí rake assets:precompile RAILS_ENV=production y lo empujó a Heroku y funcionó.


6
2017-07-24 11:43



Este fue un problema con el Heroku Ruby Buildpack, pero hoy se implementó una actualización (2013-05-21). Pruébelo y avísenos.

Para responder tu pregunta:

# 1) Esto es salida de piñones; las cosas están compiladas para /tmp y luego movido (Ver aquí en Piñones) Que yo sepa, esto siempre se ha hecho de esta manera, pero no fue hasta que la versión de Sprockets se actualizó en Rails que obtuvimos este nuevo resultado de tipo de depuración.

# 2) Anteriormente assets:precompile Generado un manifest.json archivo, pero ahora en Rails 4 el archivo de manifiesto tiene una huella digital que no se detectó previamente. Esto fue arreglado con # 74.


3
2018-05-21 14:47



Lo agregué a la parte superior de uno de mis archivos css.scss en la carpeta assets / stylesheets /.

@import "font-awesome";

luego corrió ..

rake assets:clean

y...

rake assets:precompile RAILS_ENV=production

2
2017-11-08 19:22



En Rails 4.2.4 su production.rb tiene la línea:

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

Eso significa, gem 'rails_12factor', group: :production no necesita cambiarlo a verdadero, ya que puede establecerse mediante las variables de entorno heroku. También recibirá una advertencia si elimina la gema rails_12factor.

Si usted tiene problemas con los activos, inicia sesión en la consola heroku heroku run rails console y descubre la ruta del activo para un archivo puts helper.asset_path("application.js") .

Un comportamiento extraño que noté entre desarrollo y producción, cuando no se proporciona el final del archivo:

Con una imagen /assets/images/image_01.jpg el siguiente resultado de asset_pathsdifiere:

Desarrollo:

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

Producción:

development > puts helper.asset_path('profile_01') 
=> /profile_01

development > puts helper.asset_path('profile_01.jpg') 
=> /assets/profile_01-bbd16aac5ef1d295411af44c103fcc631ab90ee94957414d4c01c3aed1055714.jpg

Tú lo haces no tengo que correr RAILS_ENV=production rake assets:precompile, heroku hace esto por ti durante el despliegue. Además, no es necesario precompilar los activos en desarrollo y llevarlos a heroku.


2
2017-11-06 20:09



Además de garantizar que tienes la gema 'rails_12factor' instalada, lo único que tienes que hacer es esto.

# config/application.rb

config.assets.paths << Rails.root.join('vendor', 'assets')

Parece que aunque Rails sabe exactamente lo que quiere, Heroku necesita que se le recuerde incluir la carpeta de activos como parte de las rutas de los activos.


1
2017-11-11 00:51