seeding ghost’s DB

building ghost-powered website’s contents in a scalable way

1. what we’re doing

We’re building a custom website for a particular client, and we’ll be using ghost as our cms. This allows us to quickly bootstrap the website, building a theme based on a custom design our client has previously picked.

2. the problem

To put this in a clear way, there’s three parts of the website we’ll deliver to our client:

  1. ghost, the CMS that will run our site
  2. a custom theme for our client, which has their colors, fonts, etc.
  3. the contents for the theme itself. the theme must have some contents in order to be fully displayed

It’s on the third item in the list where our problem lies on. Maybe it has not been paid too much attention, but there has to be a scalable way of handling the “base” or the “default” data the theme features. Some way in which a developer doesn’t see different contents than his partner when building the UI or when structuring the components and the elements for the webpage.

And it goes further than that – we’ll have:

  • one development environment per development machine (and there’ll be a couple of persons building it simultaneously)
  • a staging environment (or several of them, depending on how big our team) in which will be deployed automatically off from master branch and checked constantly so that we QA this shared env
  • a production environment – which won’t be created right away but needs to be easily deployed (and re-built) with the “initial” data once we are ready to deliver

It’s important for our building team to have a similar copy of each one of these. Keeping everybody in the same page will avoid us misunderstandings.

3. why not use DB dumps?

Well, there’s a few reasons. First, each environment must be using a different DB engine. For convenience, development environments will be using sqlite3 which is better for a bootstrap, while production environments will be running PostgreSQL.

4. the solution

The missing piece must be a program which can create (and re-create) in a one-off-run the “initial” data for the database (aka seed the database) in order to allow us to show correctly our theme

5. how to?

We’ve released a gem, which will read fixtures (yml files) for the models that currently make up ghost’s structure and will create the necessary DB records. This way our contents are written in simple text files rather than hardcoded on the theme itself.

This project has some seed fixtures we can take a look as a sample: github.com/prendho/webpage/tree/master/config/seed/fixtures

And this is the ruby gem, I hope we’ll be documenting in the close future: rubygems.org/gems/ghost-seeder

I’ll be writing some more documentation in our GH repo github.com/noggalito/ghost-seeder but basically at the moment we run the task using rake and it creates (or re-creates) the necessary data to make up the website.

$ rake db:seed

ghost-seeder db:seed task

ghost-seeder db:seed task

TL;DR

We add a ruby gem to our projects, which allows us to run a simple task and based on some “initial” data we deploy the entire website with it’s contents in a few seconds.

¿Por qué el software cuesta tanto?

Les comparto una cita de Tom DeMarco:

En lugar de preguntar por qué el software cuesta tanto, necesitamos comenzar a preguntar: ¿qué hemos hecho para hacer posible que el software actual cueste tan poco?
La respuesta a esa pregunta nos ayudará a continuar el extraordinario nivel de logro que siempre ha distinguido a la industria del software

Educación: El mayor reto “social”

Hace mucho tiempo que ciertas preguntas, sobre cosas absurdas que nuestra sociedad tiene en la cabeza, rondan mis pensamientos, y aún no he sido capaz de encontrar una respuesta para ellas. Fue hace una semana, aproximadamente, que en mi clase de CTS (Ciencia, Tecnología y Sociedad), escuché por primera vez, a mi profesor, Jorge Luis Jaramillo, pronunciar las mismas frases que me había planteado ya a mi mismo.

Empecemos…

  • “Nuestra educación nos castró”1. Actualmente, en nuestro medio, nos hemos subordinado a creer que no somos nadie si no tenemos un título de tercer nivel. Eventualmente, no lo somos; desde el momento en que pensamos (gracias a nuestra educación mediocre) que no servimos para nada si no entramos en una universidad, simplemente no lo hacemos.
  • “Un muchacho graduado debería producir”1, sin importar si es graduado de escuela, colegio, universidad o si lleva 60 años de su vida estudiando. En mi querida Loja, he conocido Ingenieros en Sistemas Informáticos y de Computación que no saben ni si quiera lo que es un emulador de terminal; he tenido que pedir soporte técnico a mi ISP y cuando he hablado con el “técnico”, lo único que puede decir es “Desconecte el rauter por cinco minutos y vuelva a conectarlo. Si aún no tiene internet, vuelva a llamar para mandar otro técnico.”; alguna vez me tocó pedirles una IP pública para poner un servidor en casa, y me dijeron: “Entre al panel de control, vea en configuraciones de la red y ahí le muestra su IP”.
  • “Un joven con título de segundo grado, es solamente un bachiller que ha desperdiciado 12 años de su vida ‘estudiando’, porque nuestros colegios se encargan de graduar gente ignorante, que ni si quiera conoce el lugar en el que vive”1; incluyéndome. Alguien que se gradúa de bachiller debería ser capaz de producir, pero..
  • “Nos sacaron del contexto; alguien nos dijo que la sociedad existía”1, y en esa sociedad, si no te gradúas de la universidad, no harás nada de tu vida. Entonces, si no entraste a la universidad, no serás nadie, nunca.
  • “Esa sociedad prefiere que seas el peor ingeniero electrónico del mundo y no que seas el mejor carpintero del mundo”1. “La educación no debería tratarse de ganar títulos1 -> Lastimosamente, en nuestro medio, la educación se limita a eso.

1Mencionado por mi profesor de CTS, Jorge Luis Jaramillo. Por cierto, recomiendo su blog y sus presentaciones!