dmd
(dub build
).
Heroku necesita conocer cómo comunicarse con las aplicaciones desplegadas.
Es por esto que Heroku proporciona una variable global llamada PORT
que
necesita ser inyectada en la aplicación y esta debe escuchar en el puerto
indicado en la variable. Para desarrollo se debe indicar un puerto
predeterminado (aquí es el 8080):
shared static this() {
// ...
auto settings = new HTTPServerSettings;
// Puerto predeterminado en el caso de que $PORT no esté asignada.
settings.port = environment.get("PORT", "8080").to!ushort;
listenHTTP(settings, router);
}
Además hay que crear un archivo Procfile
, que es un archivo de texto en el
directorio raíz de la aplicación que explícitamente declara qué comando se
tiene que ejecutar para arrancar la aplicación.
El archivo Procfile
de este ejemplo es algo como:
web: ./hello-world
Antes de avanzar hay que hacer login en la línea de comandos de Heroku usando las herramientas de Heroku Toolbelt
Esto proporciona acceso a la interfaz de línea de comandos de Heroku que se puede usar para gestionar y escalar las aplicaciones y los add-ons.
Después de instalar las herramientas (Heroku Toolbelt) hay que ejecutar lo siguiente:
$ heroku login
Para crear una aplicación hay que ir al panel de control de Heroku y seguir los pasos para crear dicha aplicación. Hay que recordar el nombre de la aplicación creada, ya que será útil más adelante.
También se puede usar la línea de comandos en lugar del panel de control para crear una aplicación:
$ heroku create
Creating app... done, ⬢ rocky-hamlet-67506
https://rocky-hamlet-67506.herokuapp.com/ | https://git.heroku.com/rocky-hamlet-67506.git
Aquí el nombre de la aplicación es rocky-hamlet-67506.
Para desplegar la aplicación se usan directamente comandos de git
. Se debería
añadir un nuevo servidor remoto de Git donde se publiquen las versiones finales.
Este nuevo servidor remoto tiene el nombre de la aplicación indicado en el punto
anterior (en este caso es rocky-hamlet-67506).
$ heroku git:remote -a rocky-hamlet-67506
El nuevo remoto se añade a la configuración de Git:
$ git remote -v
heroku https://git.heroku.com/rocky-hamlet-67506.git (fetch)
heroku https://git.heroku.com/rocky-hamlet-67506.git (push)
Los buildpacks son los responsables de generar recursos y/o código compilado.
Para obtener más información sobre los buildpacks se puede buscar en la documentación de Heroku.
Para desplegar el buildpack de Vibe.d se usa el comando:
$ heroku buildpacks:set https://github.com/MartinNowak/heroku-buildpack-d
Este buildpack usa de forma predeterminada la última versión de compilador
de D. También es posible usar GCD, LDC o una versión específica de cualquiera
de los compiladores añadiendo el archivo .d-compiler
al proyecto.
En este archivo se puede usar dmd
, ldc
o gdc
para seleccionar la última
versión de cada compilador o se puede usar dmd-2.0xxx
, ldc-1.0xxx
o
gdc-4.9xxx
para seleccionar versiones específicas de cada compilador.
Para lanzar una nueva versión después de seguir los hábitos normales de escritura de código usando Git, basta con hacer push de la última versión al remoto de Heroku añadido en puntos anteriores.
$ git add .
$ git commit -am "My first vibe.d release"
$ git push heroku master
Counting objects: 9, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 997 bytes, done.
Total 9 (delta 0), reused 0 (delta 0)
-----> Fetching custom git buildpack... done
-----> D (dub package manager) app detected
-----> Building libevent
-----> Building libev
-----> Downloading DMD
-----> Downloading dub package manager
-----> Setting PATH:
-----> Initializing toolchain
-----> Building app
Running dub build ...
Building configuration "application", build type release
Running dmd (compile)...
Compiling diet template 'index.dt' (compat)...
Linking...
Build was successful
-----> Discovering process types
Procfile declares types -> web
-----> Compiled slug size: 3.5MB
-----> Launching... done, v4
https://rocky-hamlet-67506.herokuapp.com/ deployed to Heroku
To git@heroku.com:rocky-hamlet-67506.git
* [new branch] master -> master
Con el siguiente comando se abre la aplicación en el navegador:
$ heroku open
Después del despliegue, la aplicación se está ejecutnado en la web dyno.
Se puede pensar en dyno como un contenedor ligero que ejecuta el comando
indicado en el archivo Procfile
.
Usando el comando ps
de Heroku se puede ver cuántos contenedores dyno se
están ejecutando:
$ heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping
No dynos on ⬢ rocky-hamlet-67506
De forma predeterminada la aplicación se despliega en un contenedor dyno libre que no acepta peticiones. El contenedor dyno se pondrá en reposo después de media hora sin actividad. Esto causa un retraso de varios segundos en la primera petición ya que el contenedor tiene que despertar.
Para arrancar un contenedor dyno se ejecuta el siguiente comando:
$ heroku ps:scale web=1
Heroku trata los logs como conjuntos ordenadores por tiempo de eventos agregados de todas las posibles salidas de log que existan en la aplicación y en todos los componentes de Heroku, con lo que se propociona un único canal para ver todos estos eventos.
$ heroku logs --tail
Después de desplegar la aplicación en Heroku, esta se puede hacer más impresionante usando add-ons. Por ejemplo: