Skip to content

Commit

Permalink
Episodes 292, 294, 296 in Spanish
Browse files Browse the repository at this point in the history
  • Loading branch information
pantulis committed Dec 3, 2011
1 parent eae6894 commit 9c89a99
Show file tree
Hide file tree
Showing 4 changed files with 696 additions and 1 deletion.
10 changes: 9 additions & 1 deletion episodes/000_summaries/summaries_es.html
Expand Up @@ -196,4 +196,12 @@
290 - SOAP con Savon
Comunicarnos con una interfaz SOAP puede parecer complicado pero Savon hace que sea más fácil presentando la API SOAP mediante una interfaz Ruby.
[plugins]

292 - Máquinas virtuales con Vagrant
Vagrant nos permite ejecutar nuestras aplicaciones Rails y todas sus dependencias en un entorno portable y fácil de compartir. Se puede usar para desarrollar, para montar un servidor de preproducción o para hacer experimentos.
[herramienas]
294 - Jugando con PJAX
PJAX nos permite actualizar cualquier sección de una página utilizando AJAX con soporte automático para pushState. Aquí veremos cómo usar las gemas pjax_rails y rack-pjax.
[ajax plugins]
296 - El editor Mercury
Mercury permite editar secciones de HTML directamente en el navegador web con un editor WYSIWYG. En este episodio vemos cómo integrar Mercury en una aplicación Rails, guardando los cambios en la base de datos.
[plugins vistas]
246 changes: 246 additions & 0 deletions episodes/292/es.html
@@ -0,0 +1,246 @@
<p>Como desarrolladores Rails con frecuencia nos encontraremos con que nuestro entorno de desarrollo es muy distinto del entorno de producci&oacute;n. De hecho no es nada raro tener que desarrollar la aplicaci&oacute;n en un sistema operativo distinto del que se ejecutar&aacute; en producci&oacute;n. Por otro lado, las aplicaciones Rails suelen tener tambi&eacute;n muchas dependencias que pueden ser dif&iacute;ciles de replicar en varias m&aacute;quinas diferentes.

<p><a href="http://vagrantup.com/">Vagrant</a> nos puede ser &uacute;til para solventar este problema. Permite configurar y manipular entornos de m&aacute;quinas virtuales por lo que podemos configurar una peque&ntilde;a distribuci&oacute;n linux dentro nuestro sistema operativo para ejecutar en ella nuestra aplicaci&oacute;n junto con todas sus dependencias, pudi&eacute;ndose empaquetar todo de manera portable para poder compartirlo con otros.</p>

<p>Probar Vagrant resultar&aacute; muy &uacute;til para todos los programadores Rails ya que da una idea precisa sobre c&oacute;mo configurar un entorno de producci&oacute;n para las aplicaciones, y tambi&eacute;n resulta &uacute;til para configurar entornos de preproducci&oacute;n

<h3>Instalaci&oacute;n de Virtual Box y Vagrant</h3>

<p>Vagrant utiliza <a href="https://www.virtualbox.org/">VirtualBox</a> de Oracle, por lo que tendremos que instalarlo en nuestra m&aacute;quina si todav&iacute;a no lo hemos hecho. VirtualBox est&aacute; disponible para Windows, OS X y Linux, por lo que deber&iacute;amos poder encontrar una versi&oacute;n instalable en nuestro sistema operativo. Una vez que tengamos VirtualBox podemos instalar Vagrant, que es una gema de Ruby que se instala ejecutando la siguiente orden:</p>

``` terminal
$ gem install vagrant
```

<h3>Creaci&oacute;n de una m&aacute;quina</h3>

<p>El siguiente paso es crear una m&aacute;quina virtual, lo que Vagrant denomina una <em>caja</em>. Hay una lista de m&aacute;quinas disponibles en <a href="http://www.vagrantbox.es/">Vagrantbox.es</a>, de donde se pueden descargar. Usaremos <a href="http://www.vagrantbox.es/1/">Ubuntu lucid 32</a>, que est&aacute; basada en Ubuntu Linux 10.04. Para instalar la caja tan s&oacute;lo tenemos que lanzar <code>vagrant box add</code> pasandole el nombre y la URL de la m&aacute;quina.</p>

``` terminal
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
[vagrant] Downloading with Vagrant::Downloaders::HTTP...
[vagrant] Downloading box: http://files.vagrantup.com/lucid32.box
[vagrant] Extracting box...
[vagrant] Verifying box...
[vagrant] Cleaning up downloaded box...
```

<p>Las cajas pueden ser bastante grandes (del orden de varios cientos de megabytes) por lo que la descarga puede tardar un rato. Si ya tenemos la caja descargada podemos pasar una URL de archivo para instalar desde el sistema de archivos local.</p>

<p>Tras la descarga de la caja y su instalaci&oacute;n podemos empezar a usarla para configurar nuestro entorno virtual. En Vagrant esto se hace por lo general para un proyecto espec&iacute;fico, as&iacute; que crearemos un nuevo proyecto con el que trabajar, y luego nos cambiaremos a su directorio.</p>

``` terminal
$ rails new todo
$ cd todo
```

<p>Podemos crear una m&aacute;quina virtual para esta aplicaci&oacute;n y sus dependencias ejecutando <code>vagrant init</code> y pasando el nombre de la caja que queremos utilizar.</p>

``` terminal
$ vagrant init lucid32
create Vagrantfile
```

<p>Lo que hace esta orden es crear un archivo llamado <code>Vagrantfile</code>. El fichero contiene la informaci&oacute;n sobre la configuraci&oacute;n de la caja Vagrant vinculada a esta aplicaci&oacute;n y por defecto toda esta informaci&oacute;n viene comentada salvo la l&iacute;nea que especifica la caja a utilizar.</p>

``` /Vagrantfile
Vagrant::Config.run do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.

# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = &quot;lucid32&quot;

# Rest of file omitted.
end
```

<p>Hay otras muchas opciones de configuraci&oacute;n disponibles y merece la pena dedicar un minuto para estudiarlas.</p>

<h3>Inicio de la m&aacute;quina virtual de Vagrant</h3>

<p>Es hora de que comience la magia. Lanzando <code>vagrant up</code> comenzar&aacute; el arranque de nuestra m&aacute;quina virtual, lo que puede llevar varios minutos pero una vez que hayamos terminado podemos hacer SSH en ella con</p>

``` terminal
$ vagrant ssh
```

<p>Ya estamos dentro de nuestra m&aacute;quina Virtual con Ubuntu. Se trata de una configuraci&oacute;n con muy pocos paquetes instalados pero hay un par de cosas que merece la pena destacar. La primera es que existe el usuario <code>vagrant</code> (que es con el que hemos iniciado la sesi&oacute;n), y el otro es que tenemos privilegios de <code>sudo</code> sin necesidad de clave, lo cual est&aacute; bien para nuestro entorno de desarrollo. Vagrant tambi&eacute;n deja configurado un directorio compartido en <code>/vagrant</code> que apunta al directorio donde tenemos nuestra aplicaci&oacute;n Rails.</p>

<h3>Instalaci&oacute;n de las dependencias de nuestra aplicaci&oacute;n</h3>

<p>El objetivo es poner en marca nuestra aplicaci&oacute;n Rails dentro de la m&aacute;quina virtual, por lo que tendremos que cargar sus dependencias. Primero tenemos que instalar Ruby y Sqlite. La m&aacute;quina virtual viene con Ruby 1.8.7, por lo que puede ejecutar <a href="http://wiki.opscode.com/display/chef/Home">Recetas de Chef</a>.</p>

<p>Chef permite automatizar la configuraci&oacute;n de los servidores. Para instalar Ruby 1.9 y Sqlite podr&iacute;amos aplicar las recetas necesarias y Chef las instalar&aacute; por nosotros. Chef se integra muy bien con Vagrant pero es un tema aparte que veremos en un episodio futuro, as&iacute; que vamos a configurar nuestro servidor sin usar Chef con lo que tendremos una mejor idea de c&oacute;mo encajan todas las piezas.</p>

<p>Primero usaremos <code>apt-get</code> para garantizar que el software instalado est&aacute; al d&iacute;a.</p>

``` terminal
$ sudo apt-get update
```

<p>Tras esto, instalaremos el software que nos hace falta: lo esencial para compilar software, Zlib, Git y Sqlite3.</p>


``` terminal
$ sudo apt-get install build-essential zlib1g-dev git-core sqlite3 libsqlite3-dev
```

<p>Lo &uacute;ltimo que nos queda por instalar es Ruby 1.9. Podr&iacute;amos instalarlo de cero o utilizando RVM pero vamos a usar una nueva herramienta llamada <a href="http://github.com/sstephenson/rbenv">rbenv</a>. Una ventaja de Vagrant es que podemos experimentar en un entorno seguro con herramientas que no hayamos usado antes, y si se rompe algo siempre podemos borrar la m&aacute;quina virtual y empezar de cero.</p>

<p>Para instalar rbenv en nuestra m&aacute;quina virtual tan s&oacute;lo tenemos que lanzar las &oacute;rdenes que se mencionan en la secci&oacute;n 2.1 del <a href="https://github.com/sstephenson/rbenv/blob/master/README.md">README</a>. Primero clonaremos el repostorio en <code>~/.rbenv</code>.</p>

``` terminal
$ cd
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
```
<p>A continuaci&oacute;n a&ntilde;adiremos el directorio <code>bin</code> de rbenv en nuestro PATH y lo ejecutaremos con la opci&oacute;n <codE>init</codE> en nuestro perfil de Bash.</p>


``` terminal
$ echo &#x27;export PATH=&quot;$HOME/.rbenv/bin:$PATH&quot;&#x27; &gt;&gt; ~/.bash_profile
$ echo &#x27;eval &quot;$(rbenv init -)&quot;&#x27; &gt;&gt; ~/.bash_profile
```
<p>Tendremos que volver a cargar el perfil de bash para que los cambios surtan efecto.</p>

``` terminal
$ source .bash_profile
```
<p>Ya tenemos disponible la orden <code>rbenv</code>, que podemos utilizar para gestionar nuestras versiones de Ruby, pero todav&iacute;a no podemos instalar Ruby. Utilizaremos <a href="https://github.com/sstephenson/ruby-build">Ruby Build</a> para ello, tan s&oacute;lo tenemos que clonar su repositorio Git y una vez dentro del directorio ejecutar su <em>script</em> de instalaci&oacute;n.</p>

``` terminal
$ git clone https://github.com/sstephenson/ruby-build.git
$ cd ruby-build
$ sudo ./install.sh
```
<p>Podemos usar rbenv para instalar la versi&oacute;n actual de Ruby, la 1.9.2</p>


``` terminal
$ rbenv install 1.9.2-p290
```
<p>Tras esto habremos compilado Ruby 1.9.2. Tenemos que ejecutar <code>rbenv rehash</code> cada vez que cambiemos los binarios y luego tenemos que ejecutar la siguiente orden para que 1.9.2 sea la versi&oacute;n global por defecto de Ruby en nuestra m&aacute;quina virtual.</p>


``` terminal
$ rbenv global 1.9.2-p290
```
<p>Cuando comprobemos la versi&oacute;n de Ruby, veremos que es la 1.9.2, tal y como quer&iacute;amos.</p>


``` terminal
$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
```
<h3>Instalaci&oacute;n de nuestra aplicaci&oacute;n Rails</h3>

<p>Una vez que tenemos la versi&oacute;n correcta de Ruby, podemos empezar a trabajar en levantar la aplicaci&oacute;n Rails. Si cambiamos al directorio compartido de nuestra aplicaci&oacute;n y ejecutamos <code>bundle</code> para cargar sus dependencias nos toparemos con un problema.</p>

``` terminal
vagrant@lucid32:~$ cd /vagrant/
vagrant@lucid32:/vagrant$ bundle
bundle: command not found
```
<p>Para corregir este problema s&oacute;lo tenemos que instalar la gema Bundler</p>


``` terminal
$ gem install bundler
```

<p>Una vez que se haya instalado la gema tan s&oacute;lo tenemos que ejecutar <code>rbenv rehash</code> para que est&eacute; disponible el ejecutable <code>bundle</code>. Ya podemos ejecutar <code>bundle </code> para instalar las gemas de nuestra aplicaci&oacute;n.</p>

<p>Si intentamos lanzar la aplicaci&oacute;n ahora devolver&aacute; un error quej&aacute;ndose de que no puede encontrar un entorno de ejecuci&oacute;n JavaScript. Tiene sentido, porque Rails 3.1 requiere que exista un entorno de JavaScript, y Ubuntu no viene con uno por defecto. La soluci&oacute;n r&aacute;pida es a&ntilde;adir una gema llamada <a href="https://github.com/cowboyd/therubyracer">therubyracer</a> a nuestro Gemfile y ejecutar <code>bundle</code> dentro de la m&aacute;quina virtual. Con esto se instalar&aacute; el motor JavaScript V8.</p>


``` /Gemfile
gem &#x27;therubyracer&#x27;
```
<p>Tras la instalaci&oacute;n de esta gema podemos intentar lanzar el servidor otra vez.</p>


``` terminal
$ bundle exec rails s
```

<p>Esta vez arranca correctamente y nuestra aplicaci&oacute;n se carga en el puerto 3000. No podemos verla en el navegador, porque est&aacute; en ejecuci&oacute;n dentro de la m&aacute;quina virtual. Tenemos que decirle a Vagrant que redirija el puerto a nuestra m&aacute;quina, lo que podemos hacer modificando el <code>Vagrantfile</code>. Tenemos que descomentar la siguiente l&iacute;nea, ponerle un nombre m&aacute;s adecuado y decirle que dirija el puerto 3000 al mismo puerto en nuestra m&aacute;quina local.</p>


``` /Vagrantfile
config.vm.forward_port &quot;rails&quot;, 3000, 3000
```

<p>Tras este cambio de configuraci&oacute;n tenemos que salir de nuestra sesi&oacute;n en Vagrant ejecutando <code>exit</code> dentro de la m&aacute;quina virtual y luego volviendo a cargarla con <code>vagrant reload</code>. Esto parar&aacute; la m&aacute;quina virtual y la recargar&aacute; a continuaci&oacute;n. Tras esto podemos volver a hacer SSH.</p>

``` terminal
$ vagrant ssh

```

<p>Ya en la m&aacute;quina virtual podemos cambiarnos al directorio de nuestra aplicaci&oacute;n y lanzar nuevamente el servidor.</p>


``` terminal
vagrant@lucid32:~$ cd /vagrant
vagrant@lucid32:/vagrant$ bundle exec rails s
```

<p>Con esto arranca otra vez el servidor pero ya est&aacute; accesible desde nuestra m&aacute;quina.</p>


<div class="imageWrapper">
<img src="http://asciicasts.com/system/photos/794/original/E292I01.png" width="829" height="361" alt="La aplicación ejecutándose en Vagrant."/>
</div>

<p>Como la aplicaci&oacute;n Rails est&aacute; compartida con Vagrant, cualquier cambio que hagamos en el directorio de nuestro ordenador se ver&aacute; reflejado en la m&aacute;quina virtual. Si modificamos la p&aacute;gina en <code>/public/index.html</code> y recargamos el navegador, veremos los cambios inmediatamente.</p>


```/public/index.html
<h2>You&rsquo;re riding Ruby on Rails on Vagrant!</h2>
```
<div class="imageWrapper">
<img src="http://asciicasts.com/system/photos/795/original/E292I02.png" width="829" height="361" alt="Los cambios se ven reflejados inmediatamente."/>
</div>

<h3>Otras posibilidades de Vagrant</h3>

<p>Vagrant proporciona varias &oacute;rdenes para gestionar la m&aacute;quina virtual. Por ejemplo, para ver el estado actual podemos lanzar <code>vagrant status</code>.</p>

``` terminal
$ vagrant status
Current VM states:

default running

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
```

<p>Para parar temporalmente la m&aacute;quina y luego reiniciarla podemos usar las &oacute;rdenes <code>suspend</code> y <code>resume</code>.</p>


``` terminal
$ vagrant suspend
[default] Saving VM state and suspending execution...

$ vagrant resume
[default] Resuming suspended VM...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
```

<p>Para parar totalmente la m&aacute;quina virtual podemos ejecutar <code>vagrant halt</code>. Luego tendremos que usar <code>vagrant up</code> otra vez para arrancar la m&aacute;quina.</p>

<p>Una de las &oacute;rdenes m&aacute;s &uacute;tiles es <code>vagrant package</code>. Esto empaquetar&aacute; la maquina virtual, en el estado en que se encuentre, en un fichero llamado <code>package.box</code>. Este fichero se puede compartir y distribuir para recrear f&aacute;cilmente la m&aacute;quina virtual. Si luego usamos <code>vagrant destroy</code> para borrar la m&aacute;quina virtual, la podemos recuperar despu&eacute;s con la misma orden <code>vagrant box add</code> que usamos la primera vez.</p>

<p>Con esto finaliza nuestro repaso a Vagrant, que es una gran soluci&oacute;n para capturar las dependencias de nuestras aplicaciones Rails y aislarlas en un entorno virtualizado que se puede luego empaquetar y distribuir entre otros desarrolladores, o como entorno de preproducci&oacute;n. Vagrant es todav&iacute;a m&aacute;s &uacute;til cuando se utiliza en conjunto con Chef, lo que veremos en un episodio futuro.</p>






0 comments on commit 9c89a99

Please sign in to comment.