El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

rails en alpine

| Comments

Finalmente el boom de docker llegó a Cuba. En mi caso personal, hace rato lo uso para desplegar aplicaciones de Ruby on Rails y siempre me pareció que debian era la mejor base para hacer una imagen. Si bien, hay containers de rails, eso de usar en producción, con una distro hecha por un cualquiera, como que me da cosa. Hacer una a partir de la oficial, es más sencillo que verificar la integridad de una ya hecha.

AlpineLinux para docker es un batazo, eso es in-negable. Pero instalar rails en alpine, resultó ser más complicado de lo que yo pensaba.

“docker y alpine”
1
2
docker pull alpine
docker run -ti alpine /bin/sh

Ante todo necesitamos instalar las librerías requeridas para compilar, sobre todo las dependencias de nokogiri. Instalaremos los paquetes: build-base, nodejs, tzdata, libxml2-dev, libxslt-dev, sqlite-dev y claro, ruby

En este caso, usaremos sqlite como ejemplo, pero a ti quizás te cuadre más con mariadb-dev (mysql) o postgresql-dev

“apk add”
1
2
3
4
apk update
apk add build-base nodejs tzdata libxml2-dev  libxslt-dev
apk add sqlite-dev mariadb-dev postgresql-dev
apk add ruby ruby-dev ca-certificates libffi libffi-dev

Como nokogiri es un caso tan peculiar, le diremos que compile usando las librerías del sistema, para ellos lo instalaremos aparte. Alpine no usa glibc, usa musl-libc y nokogiri NO compila, por tanto, hay que usar las librerías del sistema; en vez de las que provee nokogiri.

“nokogiri”
1
gem inst --no-document nokogiri -- --use-system-libraries

Con eso ya tenemos los cimientos echados. Nuestra imagen habrá crecido 200 megas. Ahora vamos instalar rails.

“gem”
1
gem inst --no-document rails io-console

El paso de instalar rails como gema del sistema es cuestionable para una pila de gente; pero ten en cuenta que es la manera de saber si rails funciona, recuerda que esto es un ejemplo. La primera vez me topé con que debía instalar io-console, ya que a pesar de ser dependencia, nadie la requería. Bueno a ver…

“rails”
1
2
/ # rails -v
Rails 5.0.0.1

Tengo una imagen llamada “alpine_ruby” en la que tengo todo lo necesario para instalar y No tengo la gema de rails instalada. Entonces, con cada versión de rails, por ejemplo, derivar de “alpine_ruby” la imagen alpine_rails50 , así cuando salga el rails 5.1 le llamaré alpine_rails51

Si este artículo te resultó interesante, considere donar 0.08 BTC: 1Kg4gu3e7u8HUw8bj5NbBciRg6Y56kuFCU

Comments