run nodejs node how extension create archivo app node.js heroku npm gruntjs

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?



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 .

  1. 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

  2. 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 comando grunt no se ejecuta.
  • grunt y grunt-cli deben figurar como una dependency en su package.json para que Heroku lo instale. devDependencies en devDependencies 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.