Construyendo aplicaciones Web con Go

Desplegando

Heroku facilita el despliegue de aplicaciones. Es una plataforma perfecta para pequeñas aplicaciones web de mediano tamaño que están dispuestas a sacrificar un poco de flexibilidad en infraestructura, para ganar un entorno bastante indoloro para desplegar y mantener las aplicaciones web.

Elegí desplegar nuestra aplicación web en Heroku en beneficio de este tutorial porque en mi experiencia, esta ha sido la forma más rápida de tener una aplicación web en marcha y funcionando en poco tiempo. Recuerda que el objetivo de este tutorial es cómo construir aplicaciones web en Go y no quedar atrapados en toda la distracción del aprovisionamiento, configuración, implementación y mantenimiento de las máquinas que ejecutan nuestro código Go.

Configuración inicial

Si aún no tienes una cuenta Heroku, crea una en id.heroku.com/signup. Es rápido, fácil y gratuito.

La gestión y configuración de aplicaciones se realiza a través del cinturón de herramientas de Heroku, que es una herramienta de línea de órdenes libre mantenida por Heroku. La usaremos para crear nuestra aplicación en Heroku. Lo puedes conseguir desde toolbelt.heroku.com.

Cambiando el código

Para asegurarte de que la aplicación del capítulo anterior trabajará en Heroku, tendremos que hacer algunos cambios. Heroku nos da una variable de entorno llamada PORT y espera que nuestra aplicación web se vincule a ella. Empezaremos importando el paquete "os" para que podamos enganchar esa variable de entorno PORT:

import (
    "net/http"
    "os"

    "github.com/russross/blackfriday"
)

A continuación, tenemos que enganchar la variable de entorno, comprobando si se ha definido, y si es que deberíamos vincurlanos a ella en lugar de a nuestro puerto definido en el código (8080).

puerto := os.getenv("PORT")
if puerto == "" {
    puerto = "8080"
}

Por último, queremos vincular ese puerto en nuestra llamada a http.ListenAndServe:

http.ListenAndServe(":" + puerto, nil)

El código final debe ser similar a este:

package main

import (
    "net/http"
    "os"

    "github.com/russross/blackfriday"
)

func main () {
    puerto: = os.getenv("PORT")
    if puerto == "" {
        puerto = "8080"
    }

    http.HandleFunc("/markdown" , GeneraDesdeMarkdown)
    http.Handle("/", http.FileServer(http.Dir("publico")))
    http.ListenAndServe(":" + puerto, nil)
}

func GeneraDesdeMarkdown (rw http.ResponseWriter, r *http.Request) {
    html := blackfriday.MarkdownCommon([]byte (r.FormValue("cuerpo")))
    rw.Write(html)
}

Configuración

Necesitamos un par de pequeños ficheros de configuración para decirle a Heroku cómo debe ejecutar nuestra aplicación. El primero de ellos es Procfile, el cual nos permite definir qué procesos deben funcionar para nuestra aplicación. De manera predeterminada, Go nombrará el ejecutable después del directorio que contiene tu paquete principal. Por ejemplo, si mi aplicación web vive en GOPATH/github.com/codegangsta/bwag/despliegue, mi Procfile se ve así:

web: despliegue

Específicamente para ejecutar aplicaciones Go, también necesitamos especificar un fichero .godir para decirle a Heroku cual carpeta de hecho es el directorio base de nuestro paquete.

despliegue

Despliegue

Una vez que todas estas cosas están en su lugar, Heroku facilita la implementación.

Inicia el proyecto como un repositorio Git:

git init
git add -A
git commit -m " inicial"

Crea tu aplicación Heroku (especificando el paquete de construcción Go):

heroku create -b https://github.com/kr/heroku-buildpack-go.git

Súbelo a Heroku y ¡ve cómo se despliega tu aplicación!

git push heroku master

Ve tu aplicación en todo su esplendor en tu navegador:

heroku open