Rails 3 & Assets Pipeline en modo de desarrollo/producción
-
27-10-2019 - |
Pregunta
Los activos de precompilación en el servidor de producción son muy lentos. Así que he decidido recompilarlos en la máquina de desarrollo y subir activos al Amazon S3 por jammit
. Todo está hecho pero tengo algunos problemas negativos:
- Tengo que incluir
public/assets
directorio agit
control. Porque sipublic/assets
El directorio está vacío en el servidor de producción falla - Si precompino los activos en la máquina de desarrollo
application.js
Incluye en el HTML como comprimido y de esa manera he duplicado el código JS. Cambiar JS no tiene ningún efecto porque precompiladoapplication.js
interrumpe este código.
De esa manera, mi proceso de desarrollo incluye los siguientes pasos:
- Eliminar activos precompilados si voy a cambiar JS o CSS
- Hacer algunos cambios
- Activos de precompilación
- Cargar activos a S3 por
jammit-s3
- Comprometer y presionar mis cambios, incluidos los activos al servidor GIT
- Desplegar por Capistrano
Mis preguntas son:
- ¿Es posible configurar el entorno de desarrollo no incluir comprimido?
application.js
Si lo tengo enpublic/assets
¿directorio? - ¿Es posible configurar el entorno de producción para trabajar con vacío?
public/assets
¿directorio? Los activos solo estarán en el servidor S3.
Solución 2
Resolví este problema al incluir los activos Dir en Gitignore y excluir solo un archivo - public/assets/manifest.yml
y el servidor de producción funciona correctamente ahora, es decir config.action_controller.asset_host = "http://assets.example.com"
obras. Solo requiere manifest.yml
expediente
Otros consejos
Para la pregunta uno, no conozco una solución permanente que no sea ejecutar:
bundle exec rake assets:clean
Antes de volver al modo de desarrollo. Me interesaría ver si puede ignorar los activos en el desarrollo sin apagar toda la tubería de activos.
En producción.rb hay una opción para su segunda pregunta:
# Enable serving of images, stylesheets, and JavaScripts from an asset server
config.action_controller.asset_host = "http://assets.example.com"
Luego debe ignorar su directorio de activos ya que se basa en el host remoto. Espero que ayude.