node.js - nodejs - how to create a procfile in heroku
Cómo implementar la aplicación de nodo que usa ronco para heroku (8)
Estoy usando grunt y también plugins de grunt como grunt-contrib-copy
, grunt-contrib-mincss
(que figuran como dependencias npm para mi aplicación).
Además, no npm_modules
carpeta npm_modules
y public
carpeta public
, donde están todos los archivos generados. Y no puedo descifrar cómo construir mi aplicación (tengo el comando grunt build
) después de implementar y configurar mi servidor (ya está buscando public
carpeta public
).
Vi algunas cosas como grunt-heroku-deploy
, pero me parece una mala idea confirmar antes de cargar. Tal vez hay algunas decisiones suaves ... ¿Alguna idea?
Consulte este tutorial: https://medium.com/p/c227cb1ddc56 . Explica cómo puede implementar una aplicación grunt en Heroku con un buildpack personalizado.
El paso postinstalación npm es probablemente su mejor opción, ya que puede invocar gruñido desde allí. Pero también debería verificar un buildpack personalizado, como heroku-buildpack-nodejs-grunt .
Esta publicación es específica de Rails, pero no veo por qué no podrías usarla con ningún framework de back-end y simplemente cambiar el buildpack de Ruby con lo que sea que estés usando.
La solución es, básicamente, utilizar multi buildpacks, y hacer que el buildpack Node / Grunt ejecute la grunt build
para ti directamente en Heroku.
Significativamente, esta solución no hace que revise los artefactos de construcción en el control de versiones. (¡¡¡Hurra!!!)
http://www.angularonrails.com/deploy-angular-rails-single-page-application-heroku/
Grunt (et al.) Es una herramienta de compilación, no (realmente) algo que debería empaquetar y ejecutar en producción. Un enfoque diferente sería usar Grunt para preparar su proyecto localmente (o mejor en un servidor de CI) antes de solo enviar los archivos construidos a Heroku. Como ya se mencionó, Heroku hará una npm install
en tu aplicación después de que se haya npm install
que debería ser suficiente por sí misma para finalmente preparar tu aplicación.
Lo tengo configurado para que la aplicación Heroku derivada / construida de Grunt viva en un repositorio de Git totalmente separado para mi repositorio principal del código fuente de la aplicación. De modo que cuando hago un grunt deploy
optimiza y copia los archivos relevantes en el repositorio de Heroku, lo ordena ( git add -A
etc.) y luego git push heroku master
(o lo que sea).
Parece una separación más clara de preocupaciones si sus servidores en vivo solo son responsables de ejecutar un paquete de aplicaciones preconstruido.
YMMV, por supuesto, y la respuesta aceptada anteriormente también es totalmente válida ... especialmente en un entorno en vivo bien entendido y estable como Heroku.
Para que esto funcione con ronco 4.0 seguí las instrucciones aquí https://discussion.heroku.com/t/grunt-on-heroku/98/2 . El único cambio que tuve que hacer fue eliminar la ruta al gruñido ya que el uso de barras de estilo Unix lo haría fallar en Windows y viceversa. Afortunadamente, ni siquiera necesita especificar la ruta ya que NPM buscará ronco en la carpeta node_modules / .bin https://npmjs.org/doc/scripts.html#path .
asegúrese de tener ambos gruñidos y grunt-cli instalados localmente en su paquete. json incluso si grunt le dice que instale el cli globalmente: $:
npm i -S grunt grunt-cli
agrega un paso postinstall a tu paquete.json que se ve así:
"postinstall": "grunt prod"
Parece que esto se resolverá en gran parte cuando las características de release
y slug
Heroku Platorm API entren en la línea principal. En ese punto, puede construir su código localmente (o en un servidor ci), empaquetarlo y enviarlo a heroku a través de una llamada API y liberarlo desde allí.
Esto todavía está en el período beta y solo se anunció el 19 de diciembre de 2013.
https://devcenter.heroku.com/articles/platform-api-deploying-slugs
Nunca estuve muy contento con la cantidad de personas que parecían estar bien al registrar tu código generado en git o en el gancho postinstalación de NPM. :(
Además de una postura filosófica, hacer una compilación durante un lanzamiento es simplemente otro punto de falla potencial.
Solo por diversión : dado que aún no está finalizado, aquí hay un script bash que lancé, por el momento puedes usar para compilar tu código en una rama de implementación, comprometerlo, implementarlo en heroku y luego eliminar la rama de implementación. (Realmente no soy entusiasta de las secuencias de comandos de despliegue de bash, por lo que estoy deseando que se agreguen las API de la plataforma)
#!/bin/bash
set -e
# Delete current deploy branch
git branch -D deploy
# Create new deploy branch based on master
git checkout -b deploy
# Grunt comands to build our site
grunt build:production
# the dist/ directory is in my .gitignore, so forcibly add it
git add -f dist/
git commit -m "Deploying to Heroku"
# Push it up to heroku, the -f ensures that heroku won''t complain
git push heroku -f deploy:master
# Switch it back to master
git checkout master
npm tiene soporte para un paso postinstall
a la postinstall
(entre muchos otros) que podría ser justo lo que está buscando.
El buildpack nodeku de node.js ejecuta este comando cuando presionas a heroku para resolver dependencias de compilación:
$ npm install --production
https://devcenter.heroku.com/articles/nodejs-support#build-behavior
Si echa un vistazo a la documentación de npm, puede configurar una serie de scripts para ejecutar antes o después de que alguien ejecute la npm install
para su paquete. Está configurado en la propiedad scripts
de package.json
. La propiedad de scripts
permite ejecutar scripts personalizados (incluido el grunt
) cuando ocurren ciertas cosas en el ciclo de vida de un paquete.
Por ejemplo, para hacer eco de algunos textos y ejecutar el comando grunt
cada vez que alguien (incluido Heroku) ejecute la npm install
, agréguelo a su package.json
:
{
...
"scripts": {
"postinstall": "echo postinstall time; ./node_modules/grunt-cli/bin/grunt <your task name>"
},
...
}
https://npmjs.org/doc/scripts.html
Advertencias importantes:
- Puede que tenga que cambiar la ruta al binario grunt en el script
postinstall
, verifique el resultado del error si el comandogrunt
no se ejecuta. -
grunt
ygrunt-cli
deben figurar como unadependency
en supackage.json
para que Heroku lo instale.devDependencies
endevDependencies
no es suficiente ya que Heroku no los instalará. Además, tenga en cuenta que Heroku no lo instalará como un paquete global, por lo que para ejecutarlo en Heroku tendrá que usar una ruta relativa (como se configuró anteriormente).
Si esto no funciona (es probable que tengas que jugar un poco con las rutas relativas), entonces podrías considerar escribir tu propio buildpack personalizado para Heroku .
Actualizar
A partir de 0.4, el paquete grunt
ya no contiene el grunt
binary, que ahora es parte del paquete grunt-cli
. La respuesta ha sido actualizada para reflejar esto.
Heroku buildpack funciona bien para mí. Buena cosa.