Workflow para desarrollar con WordPress

Hay muchas formas de desarrollar con WordPress, voy a especificar aquí la que yo uso desde hace un tiempo, me permite desarrollar en local y sincronizar con el servidor de staging/producción cuando los cambios están testeados y validados.

Estas son todas las herramientas que uso para el flujo de trabajo:

No voy a entrar en el detalle de instalación de cada herramienta, en las páginas oficiales podéis encontrar las instrucciones para cada sistema operativo, si alguien se queda con alguna duda puede preguntar en los comentarios.

Imaginemos que voy a empezar un nuevo proyecto, en este ejemplo solo voy a contemplar el desarrollo en local y deploy a producción, sin contar con un servidor de staging, pero veremos que añadirlo es cuestión de segundos.

Lo primero que haremos será crear el directorio del proyecto

mkdir myproject
cd myproject/

A continuación vamos a inciar valet solo para este proyecto, esto es:

valet link

A partir de ahora, podremos acceder a la dirección http://myproject.dev desde el navegador. Lo siguiente que tenemos que hacer es instalar y configurar WordPress, para ello vamos a necesitar crear una base de datos vacía, yo uso Sequel Pro o la linea de comandos para esto, no entro en detalle por que es algo que si desarrollas con WordPress te resultará más que familiar. Vamos con la instalación de WordPress, para ello ejecutamos el siguiente comando:

wp core download

Esto descargará la ultima versión del core de WordPress, puedes usar wp-cli para configurar e instalar WordPress o después de que se haya descargado acceder a http://myproject.dev y continuar el proceso de instalación paso a paso de WordPress.

Una vez instalado, vamos a hacer uso de Wordmove para el deployment, tanto de archivos como de base de datos, para ello ejecuta el siguiente comando:

wordmove init

Esto generará un archivo Movefile en la raiz de tu directorio, en el tendrás algo parecido a esto:

local:
  vhost: "http://myproject.dev/"
  wordpress_path: "/ruta/hasta/myproject" # use an absolute path here
  database:
    name: "nombre_db_local
    user: "usuario_db_local"
    password: "***********"
    host: "127.0.0.1"
production:
  vhost: "http://myproject.com/"
  wordpress_path: "/ruta/completa/de/tu/servidor" # use an absolute path here
  database:
    name: "nombre_db_servidor"
    user: "usuario_db_servidor"
    password: "********"
    host: "host_db"
  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "node_modules/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"
  ssh:
    host: "tu_host"
    user: "tu_usuario"
    password: "tu_password" # password is optional, will use public keys if available.

Como veis, el sistema que usa Wordmove para hacer el deploy es vía SSH, aunque si tu servidor no lo permite, aún puedes usar la sincronización vía FTP, en la página oficial encontrarás cómo hacerlo.

Una vez configurado nuestro archivo Movefile, tan solo tendremos que ejecutar los comandos wordmove <pull|push>, podéis ver la ayuda para ver que opciones hay, pero os pongo los dos que yo más utilizo:

Para traer (pull) del servidor de producción los archivos de la carpeta uploads y la base de datos, util cuando quieres una replica exacta en local de lo que hay en el servidor:

wordmove pull -ud

Nota: cuando te “traes” la base de datos, es conveniente que revises que el prefijo de tablas que estés usando en local y producción sea el mismo, para ello edita wp-config.php en tu versión en local para hacerlos coincidir, además yo suelo añadir en el wp-config.php local las siguientes lineas para que no haya problemas con la URL:

define('WP_HOME', 'http://myproject.dev/');
define('WP_SITEURL', 'http://myproject.dev/');

Para mandar (push) los cambios que hayas hecho en los archivos de plugins y themes en local, esto solo sincroniza los archivos que han cambiado:

wordmove push -pt

Es muy sencillo trabajar con multiples entornos, no solo local y producción, basta con agregar la configuración al archivo Movefile y especificar el entorno al ejecutar el comando. Aquí tienes más información.

Por último, aunque es opcional también es recomendable, por eso incluía Git en las herramientas de trabajo, si es un theme lo que estoy desarrollando, lo habitual sería crear un repositorio git en el directorio correspondiente al theme, por ejemplo myproject/wp-content/themes/mytheme/ para mantener el control de versiones del código.

Suelo usar valet por su simpleza y por que en la mayoría de proyectos no necesito una configuración del lado del servidor concreta, si necesitas instalar más cosas, te recomiendo echar un vistazo a las soluciones que hay usando docker o vagrant.

 

RSS en Rails 2 y REST

Generar un RSS válido en Rails es muy fácil, con REST es aún más claro, y la respuesta a distintos formatos de Rails 2 lo facilita aún más. Veamos un ejemplo, además especificaremos la mayoría de los atributos soportados por el formato RSS 2.0.

Supongamos, como hemos dicho, que tu aplicación está en Rails 2, cumple los principios REST y tenemos un modelo Article. En el controlador tendremos una acción index que nos dará un listado de todos los artículos. Veamos el código de dicha acción


  def index
    @articles = Article.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.rss  { render :rss => @articles }
    end
  end

Como a muchos de vosotros no os interesará este artículo lo divido por aquí.

Continuar leyendo “RSS en Rails 2 y REST”