You are on page 1of 31

xenda :: less pain, more fun http://xendacentral.

com

desarrollo web #likeaboss


gua del curso

xenda :: less pain, more fun http://xendacentral.com

git / github bsicos


creacin de un repositorio
Un repositorio en Git corresponde al conjunto de objetos e informacin que Git observar y revisar. Al iniciar un repositorio, se crear una carpeta .git (carpeta oculta) en la carpeta donde ejecutemos el comando.

git init

trabajando con repositorios remotos


Un repositorio remoto es aquel repositorio que dar soporte de monitereo a nuestro repositorio local pero que puede estar ubicado en otra instalacin, en una red local o va internet. Al ser Git un sistema descentralizado para el manejo de versiones, no requiere denir o congurar un servidor central, pudiendo efectivamente ser la propia estacin de trabajo o cualquer otra la que, por convencin social, se seleccione como tal.

En el curso hemos utilizado los servicios de GitHub que, adems de ser un repositorio git como otros, posee una interfaz web para la administracin y monitoreo del cdigo.

Para aadir un repositorio como punto remoto en nuestro repositorio local, utilizamos la siguiente sintaxis:

xenda :: less pain, more fun http://xendacentral.com

git remote add NOMBRE RUTA_REPOSITORIO

El nombre indicado ser utilizado para referenciar a este repositorio remoto cuando querramos interactuar con l. En el caso de Github, podramos aadirlo de la siguiente manera (en una sola lnea)

git remote add origin git@github.com:CUENTA/repositorio.git

Cada repositorio aadido requirir tener un nombre nico. Por ejemplo, si quieremos utilizar los servicios de Heroku, podramos aadir ese repositorio de esta manera:

git remote add heroku git@heroku.com:repositorio.git

El nuevo repositorio estara asociado al nombre heroku y al acceso de git respectivo. Ntese que este paso no es necesario si hemos usado la gema heroku de sta manear:

heroku create NOMBRE --stack cedar

En ese caso, la gema automticamente se encargar de agregar el repositorio remoto asociado. Ese paso requiere, sin embargo, que el repositorio git exista. En caso no lo haga, crear la conguracin correcta pero no podr agregar el repositorio remoto.

xenda :: less pain, more fun http://xendacentral.com Si queremos revisar la lista de repositorios remotos con los que contamos podemos utilizar el comando:

git remote

El resultado ser una lista de todos los repositorios enlazados al nuestro. Si queremos ms informacin de stos, podemos utilizar la forma

git remote show NOMBRE

Finalmente, para eliminar un repositorio remoto, usaremos el comando rm:

git remote rm origin

Si queremos arreglar o corregir algn elemento manualmente, podemos revisar cmo se manejan las rutas y enlaces a los repositorios en el archivo .git/cong.

aadiendo archivos al ndice


Al ser Git un sistema que no vigila cambios en archivos, sino en objetos que le indiquemos, es necesario que, como paso inicial, se le dena que lista de archivos queremos aadir al ndice. En principio, si bien la prctica puede ser algo extensa (al tener que aadir varios archivos), se pueden usar algunos atajos para aadir todo (descritos en la gua) pero ello tambin brinda bastante exibilidad para slo mantener en control algunas reas de la aplicacin y no otras (archivos con datos condenciales o sensibles).

xenda :: less pain, more fun http://xendacentral.com Para aadir un elemento al ndice podemos utilizar el comando:

git add ELEMENTO

Ese elemento podra ser un archivo o una carpeta, que Git incorporar al ndice. Podemos aadir grupos de archivos:

git add *.rb

O aadir todo el contenido de la carpeta actual.

git add .

Esta ltima invocacin utilizar la propiedad de los sistemas *nix de referirse al directorio actual con un ., y aadir todos los archivos, sin importar en que nivel de anidacin estn.

viendo el estado de nuestro ndice


Git mantendr siempre un estado de los cambios que observa en los objetos que hemos decido aadir en nuestro ndice y nos permitir obtener una vista de ste utilizando el comando status:

git status

xenda :: less pain, more fun http://xendacentral.com En una aplicacin recin inicializada, obtendremos un resultado similar a ste (editado para mejorar como se muestra):

# On branch master # Initial commit # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: file1.txt new file: file2.txt

# Untracked files: # (use "git add <file>..." to include in what will be committed) # file3.txt

En el ejemplo, notaremos que estamos trabajando en un repositorio nuevo (por ello dene que existen nuevos archivos le1.txt y le2.txt que aun no han sido creados en un commit). Adicionalmente, nos indica que existe un archivo cuyos cambios no estn siendo monitoreados (le3.txt).

ignorando archivos
Si bien Git permite decidir que archivos pertenecern al ndice, mostrar siempre aquellos que no en el estado del repositorio. Para indicarle que siempre ignore stos, editaremos el archivo .gitignore (o lo crearemos en caso no existir), y podremos indicar en ste, uno por lnea, que archivo o archivos ignorar:

En el ejemplo actual, podemos realizar un archivo .gitignore que tenga el siguiente contenido:

file3.txt
Si se le solicita un estado del repositorio luego de realizar el cambio, veremos entonces:

xenda :: less pain, more fun http://xendacentral.com

git status

# On branch master # Initial commit # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: file1.txt new file: file2.txt

# Untracked files: # (use "git add <file>..." to include in what will be committed) # # .gitignore

Mostrar entonces ahora un nuevo archivo cuyos cambios no se siguen (.gitignore) pero ya no se indicar el archivo le3.txt que previamente se mostraba ya que entiende que debe ignorarlo. El archivo .gitignore puede ser congurado para ignorar series de archivos. Una aplicacin tipo de Rails 3.x incluye automticamente el siguiente archivo:

# Ignore bundler config /.bundle # Ignore the default SQLite database. /db/*.sqlite3 # Ignore all logfiles and tempfiles. /log/*.log /tmp

xenda :: less pain, more fun http://xendacentral.com Por defecto, en una aplicacin Rails estaremos ignorando los archivos de conguracin de bundler, las bases de dato de SQLite, los archivos de log y los temporales, debido a que cada uno de ellos dependen y varan de la instalacin personal del desarrollador o no pertenecen al control de un manejador de versiones.

realizando un commit
Git dene un estado nuevo con cada commit que se realiza en el repositorio. Debido a que el soporte a commits en Git es bastante rpido y eciente, se recomienda hacer commits frecuentes y por cada cambio realizado (nueva funcionalidad, correccin de un bug, archivos nuevos aadidos, etc). Hacer un commit requiere como mnimo indicarle a Git qu archivos se desean agregar a ste, y qu identicador/mensaje del commit debe tener. De esa manera, un ujo de trabajo bsico para prepara un nuevo commit requiere que aadamos los archivos que queremos agrupar en el commit:

git add archivo1.rb archivo2.rb

Git entender que esos archivos deben ser reaadidos al ndice y los cambios que han sufrido en relacin a los cambios que tenan previamente, sern registrados. Finalmente, le indicaremos a Git que queremos realizar el commit:

git commit -m Archivos modificados

En caso no usemos el ag -m en el comando, Git abrir el editor pretederminado para que se pueda aadir el mensaje.

xenda :: less pain, more fun http://xendacentral.com La exibilidad de poder decidir qu archivos poseer cada commit permite que, sin importar que aadamos editado varios archivos, podamos decidir cules y en que orden aparecer en el ndice.

Por ejemplo, podemos tener una aplicacin que requiera una gema especial para utilizarse en Windows y adicionalmente corregir un error que se haba encontrado. Luego de hacer el cambio y probar que funciona perfectamente, nuestro proceso sera el siguiente:

git add Gemfile

git commit -m Aadida Gema para Windows

git add archivo_corregido.rb

git commit -m Correccin de error

Que obtendramos con ello? Si en nuestro equipo contamos con personas que no utilizan Windows y por ende no requeriran el cambio en su archivo Gemle que agrega la gema para Windows, simplemente podran aplicar en su cdigo el commit que corrije el error y no el otro.

En caso estemos seguros que todos los archivos modicados que ya estaban en el ndice previamente sern parte, en su conjunto, del nuevo commit, Git nos permite aadirlos automticamente usando el ag -a:

git commit -a -m Cambios en archivos

xenda :: less pain, more fun http://xendacentral.com Una manera de abreviar el uso de ambos ags (y el ms utilizado) es realizarlo de la siguiente manera:

git commit -am Cambios en archivos

Un error muy comn, sin embargo, es luego de haber trabajado en una funcionalidad que modica archivos existentes pero tambin agrega nuevos, es usar el comando y olvidar aadir los nuevos archvos al ndice. El ag -a slo aadir al commit los archivos que previamente ya existan y Git conoca. En caso existan archivos nuevos, se podra usar este ujo:

git add .

git commit -am Cambios y nuevos archivos

Podemos recordar tambin que el comando git add . aadir todos los nuevos archivos encontrados. Si queremos aadir slo uno, el ujo apropiado sera nalmente:

git add archivo.rb

git commit -am Cambios en nuevos archivos

enviando los commits a un repositorio

xenda :: less pain, more fun http://xendacentral.com

Cada commit que se realiza en el repositorio actualiza la informacin que ste tiene de manera local. En un punto en particular, podramos decidir enviar ese conjunto de cambios hacia un repositorio designado para ello (por ejemplo Github).

Para ello utilizaremos la sintaxis:

git push REPOSITORIO RAMA

Por ejemplo, si hemos aadido un repositorio de Github como repositorio remoto y le aadimos el nombre origin, usaramos el comando:

git push origin master

master representar la rama de desarrollo principal (conocida como trunk en otros sistemas de control de versiones).

En caso queramos subir el contenido de nuestros commits a otra rama del repositorio remoto, podemos usar la sintaxis completa:

git push REPOSITORIO RAMA_ORIGEN:RAMA_DESTINO

Por ejemplo, si estamos trabajando en una aplicacin en produccin y hemos hecho cambios que queremos enviar a GitHub pero todava no integrarlos a la rama de produccin nal hasta hacer

xenda :: less pain, more fun http://xendacentral.com ms pruebas (son las 9pm y estamos en un viernes en la noche!) podramos crear una nueva rama de esta manera:

git push origin master:cambios

Ese comando crear un nuevo branch cambios en el repositorio remoto origin con el conjunto de commits nuevos enviados.

clonando una aplicacin


Las ventajas de tener un sistema descentralizado es que podemos recrear el mismo repositorio desde cualquiera que tenga el cdigo en l. Por ejemplo, podemos denir uno de los equipos como central y extraer de ese las versiones de produccin o estables a un nuevo equipo. Para obtener una copia del repositorio con todo el historial y commits previos, realizaremos un clon de ste usando el comando:

git clone URL

La url de acceso podr ser SSH, GIT o HTTPs segn el protocolo que soporte el repositorio de donde clonaremos la aplicacin. Al nalizar el proceso, Git habr creado una carpeta con el nombre del repositorio que contendr todos los archivos en el ndice, as como la carpeta .git con el contenido e historial de nuestro repositorio.

Por ejemplo, podemos instalar un repositorio ubicado en GitHub utilizando:

git clone git@github.com:USUARIO/NOMBRE.git


Esa conexin requerir que existan los privilegios de coneccin entre un punto y el otro. Un error comn al realizar un clon de un repositorio en Github es no haber congurado correctamente las

xenda :: less pain, more fun http://xendacentral.com llaves privadas y pblicas. Para comprobar que la conexin es correcta y el problema yace en otro lugar, podemos realizar una conexin SSH:

ssh -T git@github.com

Si todo es correcto, veremos una respuesta del tipo:

Hi username! Youve successfully authenticated, but GitHub does not provide shell access.
Incidentalmente, otro error comn es olvidar que cuando git realiza el clon, crear una carpeta y no pondr los objetos en el lugar donde ejecutamos el comando. Recordar siempre que

cd CARPETA

para estar en el contexto del repositorio corregir la mayora de errores iniciales.

actualizando nuestro repositorio


Para actualizar nuestra copia del repositorio con cambios que otras personas hayan hecho hacia un repositorio remoto, podemos utilizar el comando pull:

git pull NOMBRE RAMA

Por ejemplo, la invocacin ms comn es realizar

xenda :: less pain, more fun http://xendacentral.com

git pull origin master

No debemos olvidar que todos los repositorios se comportan de igual manera. Por ejemplo, si utilizamos Heroku que es tambin un repositorio Git (adems del sistema de despliegue e instalacin de aplicaciones) podramos obviar el uso de Github e interactuar solo con ste, enviando nuestros commits (asumiendo que hemos llamado el repositorio heroku o lo hemos creado usando la gema del mismo nombre):

git push heroku master

Y actualizar nuestro cdigo utilizando

git pull heroku master

xenda :: less pain, more fun http://xendacentral.com

heroku
instalacin de la gema
Heroku permite interactuar con su servicio via el uso de una gema que instalaremos en nuestro sistema via Rubygems:

gem install heroku

creacin de la aplicacin
Heroku es un sistema de hospedaje de aplicaciones que utiliza Git para manejar las versiones de cada despliegue. Una aplicacin de Heroku estar asociada y tendr un repositorio de Git que se crear utilizando el comando de la gema de Heroku respectivo.

Previamente a trabajar con Heroku, debemos haber inicializado previamente un repositorio git en nuestra aplicacin (usando el comando de git init descrito previamente). Luego de realizar ello, en la carpeta de nuestra aplicacin Rails podemos ejecutar:

heroku create

Sin agregar ningn comando adicional, Heroku automticamente crear una aplicacin con un nombre aleatorio en sus sistema, y un repositorio git remoto asociado a ella. Adicionalmente, congurar tambin el repositorio remoto en nuestro repositorio local (que podemos comprobar usando el comando heroku remote.

xenda :: less pain, more fun http://xendacentral.com El nombre de la aplicacin que se crea de manera aleatoria ser tambin la direccin para acceder a la aplicacin via nombre.heroku.com

En caso querramos indicar un nombre en particular (que es el escenario ms comn) utilizaremos la versin:

heroku create NOMBRE

El nombre deber ser nico y no existir previamente en otras aplicaciones de heroku ya que corresponder al subdominio a usar para acceder a este.

Heroku trabaja utilizando stacks de conguraciones para cada proceso. El stack por defecto (Bamboo) que usa Heroku con el comando utilizado previamente, funciona correctamente para aplicaciones hasta Rails 3.0.

Rails 3.1 sin embargo introduce una funcionalidad llamada Asset Pipeline, que permite generar assets (archivos javascript, hojas de estilos y dems) mediante sistemas generados como CoffeeScript (que compilar los archivos .coffee a archivos en Javascript) o SCSS (que compilar archivos .scss a archvos CSS).

Para ello, usar un proceso un precompilacin de assets para tenerlos disponibles cuando los usuarios ingresen a la aplicacin web y reciban los archivos CSS y JS compilados. Sin embargo, ese proceso obliga a que el servidor brinde privilegios de escritura para grabar los archivos nuevos en la carpeta /public.

El stack predeterminado de Heroku no permite que funcione ese proceso de manera ptima ya que es un servicio de slo lectura. Sin embargo, Heroku introdujo un nuevo stack de conguracin llamado cedar que permite la ejecucin y ms control en los procesos, adems de dar soporte a tecnologas como NodeJS, Python y otros. Y nalmente, permitir la compilacin de los recursos.

xenda :: less pain, more fun http://xendacentral.com Cuando trabajamos con una aplicacin mayor a 3.0 (Rails 3.1 y Rails 3.2 hasta ahora) es conveniente crear una aplicacin en el stack Cedar:

heroku create NOMBRE --stack cedar

Ello crear la aplicacin en el stack correcto. Vale aadir que en este caso, la direccin para acceder a la aplicacin sera nombre.herokuapp.com en lugar de nombre.heroku.com como en los stacks anteriores.

cambios en la aplicacin (asset pipeline)


Heroku es sistema que utiliza como base de datos postresql. Es importante indicar en el Gemle de nuestra aplicacin que gema utilizar en produccin y en desarrollo si es que utilizaremos Heroku como base:

group :development do gem 'sqlite3' end

group :production do gem 'pg' end


De esa manera, se indicar que usaremos la gema sqlite3 (o mysql2 por ejemplo) en el entorno de desarrollo y la gema pg (de PostgreSQL) para produccin.

Cada cambio realizado en el archivo Gemle debemos regenerar nuestro archivo Gemle.lock para que se descarguen, actualicen y denan las versiones y gemas que la aplicacin utilizar.

Normalmente eso requiere que se utilice el comando:

xenda :: less pain, more fun http://xendacentral.com

bundle install

O simplemente

bundle

Sin embargo, ese comando tratar de instalar todas las dependencias inscritas en el archivo Gemle. Una de ellas sera la gema pg que utilizara Heroku para comunicarse con PostgreSQL, pero que podra no estar instalada en nuestro equipo de desarrollo.

Cada gema que Rails emplea para interactuar con una base de datos (como pg, sqlite3, mysql, mysql2, etc), requiere que existan ciertos archivos desarrollo de la base de datos en cuestin para que se pueda compilar e instalar.

En caso no exista una de esas bases de datos en local pero se mencione el uso de su gema correspondiente, Bundler fallara en el proceso de instalacin ya que no podra no encontrara las bibliotecas correspondientes.

Para evitar ello, podemos indicarle que slo genere una conguracin para los entornos de desarrollo y testing y no los de produccin:

bundle --without production

Heroku a su vez realizar algo parecido:

xenda :: less pain, more fun http://xendacentral.com

bundle --without development test

Ello permite que en Heroku no se instale ninguna gema que no sea necesaria para produccin.

actualizacin de la aplicacin
Cada cambio que querramos actualizar en nuestra aplicacin instalada en Heroku debe estar acompaado de un push al repositorio de ste.

Para ello, realizaremos los pasos completos:

git add .

git commit -am Nueva funcionalidad

git push heroku master

De esa forma, automticamente Heroku recibir el push y proceder a instalar la nueva versin en el servidor y activarla para ser accedida por los usuarios.

Un error comn en este proceso es actualizar el Gemle y olvidar generar un bundle que Heroku reconozca para saber que hay nuevas gemas o cambios en sus versiones. En caso suceda, Heroku indicar un mensaje de error relacionado.

xenda :: less pain, more fun http://xendacentral.com

ruby
instalacin del lenguaje
La instalacin de Ruby como lenguaje suele ser un poco ms compleja segn el entorno donde estemos dependiendo que tipo de desarrollo queramos realizar. Muchos proyectos se han enfocado en facilitar la tarea.

En Windows, una de las formas ms sencillas es realizarlo va el paquete RailsInstaller (http:// railsinstaller.org/) que instalar, adems de Ruby y Rails, herramientas como Git, SQLite, soporte para SQLServer, etc).

Un proyecto similar con soporte a MySql es RailsFTW (http://railsftw.bryanbibat.net/) con un enfoque similar. Este ltimo no instalar, sin embargo, herramientas como Git.

En un entorno *nix (como GNU/Linux u OSX), la instalacin es manual pero directa. Este ltimo enfoque permite conocer bien qu tipo de herramientas instalamos y prepararnos para cuando tengamos que hacer algo similar en un servidor de produccin (cuando no utilizamos servicios como Heroku o herramientas como Passenger/mod_rails).

El primer paso es asegurarnos que contamos con las herramientas y dependencias necesarias. Sistemas como Ubuntu, por ejemplo, requieren la instalaciones de diversas bibliotecas ya que no estn preparadas como entornos de desarrarrollo. Una lnea como sta:

sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev sqlite3 libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf nodejs

OSX requiere tambin la instalacin de algunas herramientas para la compilacin de bibliotecas. La

xenda :: less pain, more fun http://xendacentral.com forma ms prctica es instalar el compilador GCC desde https://github.com/downloads/ kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg. Este paquete previamente vena incluido con Xcode, el IDE y recurso de desarrollo de OSX, pero fue eliminado en su versin 4.2.

Finalmente, en OSX deberamos instalar alguna herramienta para administrar paquetes (similar al apt-get/yum de sistemas GNU/Linux). Una recomendada es Homebrew: https://github.com/mxcl/ homebrew/wiki/installation. Tras instalarla, podemos Homebrew para instala Git de esta manera:

brew install git

En ambos casos (OSX y GNU/Linux) usaremos el manejador de versiones de Ruby rbenv. rbenv es un proyecto que se encarga de simplemente altercar versiones de Ruby, mas no de instalarlas. Para la instalaciones de las versiones, utilizar un proyecto hermano (del mismo desarrollador) llamado ruby-build. Ya que tenemos las dependencias y bibliotecas necesarias instaladas, podemos proceder a instalarlo:

cd git clone git://github.com/sstephenson/ruby-build.git cd ruby-build ./install.sh


En este caso, hemos clonado el proyecto ruby-build y ejecutado el archivo install.sh que est en esa carpeta que se encargar de instalarlo.

Finalizado el proceso, instalaremos ahora rbenv. El proceso es similar:

cd git clone git://github.com/sstephenson/rbenv.git .rbenv

xenda :: less pain, more fun http://xendacentral.com Los comandos nos retornarn a nuestra carpeta home o inicio, y realizarn un clon del proyecto rbenv a la carpeta .rbenv.

La carpeta .rbenv alojar no solo el cdigo de rbenv, sino tambin los archivos binarios que se utilicen en Ruby (por ejemplo, los archivos rails, rake, bundler, etc).

Cuando escribimos en nuestra terminal un comando como rails, el sistema operativo tratar de ubicarlo en una serie de carpetas que se le ha indicado como fuentes para la bsqueda. Como nuestra carpeta .rbenv tambin alojar estos binarios, es necesario indicarle al sistema que busque en sta tambin. Ello lo realizaremos con el comando:

echo 'if [ -f ~/.bashrc ]; then . ~/.bashrc; fi' >> ~/.bash_profile echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc exec $SHELL

Lo que har esta serie de instrucciones es imprimir en el archivo .bash_prole y .bashrc conguraciones para que el sistema operativo sepa que tambin debe buscar archivos binarios en la ruta .rben/bin. Este cambin slo lo deberemos hacer una vez por cada mquina.

Adicionalmente, se encargar de decirle al sistema operativo que inicialice rbenv cada vez que se inicie el sistema, dejando as todo congurado.

Finalmente, estamos ya listos para instalar una versin de Ruby. Por ejemplo:

rbenv install 1.9.2-p290

xenda :: less pain, more fun http://xendacentral.com Ello instalar la versin de Ruby 1.9.2 (con el parche en la versin 290). Podemos enviarles algunos parmetros adicionales a la instalacin (por ejemplo, para agregarle soporte a OpenSSL):

rbenv install 1.9.3-p0 --with-openssl-dir=/ usr/local

actualizacin de binarios
Debido a la forma en que funciona rbenv, es necesario actualizar los binarios que este maneja mediante el comando:

rbenv rehash

Un error comn tras instalar gemas que traigan binarios (como Rails o Bundler) es olvidar ejecutar ese comando que se encarga de generar los binarios necesarios para la versin de Ruby activa en ese momento.

instalacin de gemas
Luego de la instalacin de Ruby, instalar las gemas se realiza simplemente invocando el comando:

gem install NOMBRE

xenda :: less pain, more fun http://xendacentral.com Podemos tambin indicar una versin en particular:

gem install NOMBRE -v=VERSION

Por ejemplo, si deseamos instalar Rails 3.0, podramos hacerlo utilizando:

gem install rails -v=3.0

rails
generacin de una aplicacin

xenda :: less pain, more fun http://xendacentral.com

La gema rails instalada previamente nos permitir, entre otras cosas, tener acceso a un binario llamado igualmente rails. Via este comando, podremos interactuar con la gema y solicitarle que nos genere diversos elementos, desde una aplicacin, hasta un modelo o una migracin.

La forma ms sencilla de obtener documentacin sobre qu hace cada elemento de la sintaxis, es ejecutar directamente el cdigo

rails

La respuesta del comando ser una serie de datos y detalles sobre qu argumentos soporta la llamada.

Para crear una aplicacin, podemos simplemente indicarlo como:

rails new NOMBRE

Existen algunos elementos de inters que podemos aadirle. Por ejemplo, Rails intentar crear una aplicacin por defecto que utilice SQLite3 como manejador de datos. En caso quisiramos crear una aplicacin que utilice, por ejemplo, MySQL, podramos hacerlo de esta manera:

rails new NOMBRE -d mysql

xenda :: less pain, more fun http://xendacentral.com

El ag -d le indicar a Rails que deseamos utilizar otro manejador de base de datos y ste ubicar y aadir al Gemle la gema indicada. Los valores vlidos actuales son:

mysql/oracle/postgresql/sqlite3/frontbase/ibm_db/sqlserver/ jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc

En caso de, por ejemplo, no desear utilizar jQuey como framework predeterminado de Javascript, podramos utilizar el ag -j e indicarle otro valor:

rails new NOMBRE -j mootools

Para revisar todas las opciones disponibles de creacin de una aplicacin, podemos utilizar el comando

rails --help

creacin de un scaffold
Una vez inicializada nuestra aplicacin, podramos proceder a crear un primer recurso de soporte: el scaffold. Un scaffold ser una pieza de cdigo creada por Rails de todos los elementos que soporta: Modelo, Controladora, Vistas, Rutas y Assets, que nos permite tener una seccin de inicio rpida que luego podamos modicar, eliminar y adaptar a nuestras necesidades.

xenda :: less pain, more fun http://xendacentral.com Para ello, utilizaremos el argumento generate de Rails. Este comando esta compuesto de una serie de adaptadores que nos permiten generar diversos tipos de resultados (scaffolds, modelos, controladoras, migraciones, etc). Incluso, los generadores pueden ser mejorados y aumentados via el uso de gemas de terceros.

Para crear un scaffold, utilizaremos esta forma:

rails generate scaffold MODELO [ATRIBUTOS]

Los atributos del modelo debern ser introducidos de la siguiente manera:

nombre:tipo

Por ejemplo, si deseamos crear una base de scaffold para libros que tengan un ttulo y una descripcin, podemos utilizar:

rails generate scaffold book title:string description:text

Los tipos de datos soportados por Rails son:

:binary :boolean :date

:integer :primary_key :string

xenda :: less pain, more fun http://xendacentral.com

:datetime :decimal :float

:text :time :timestamp

creacin de migraciones
Tras haber creado elemento como un scaffold o un modelo, Rails crear tambin una migracin relacionada. Una migracin es un cambio o impacto en una base de datos. Desde la creacin de una tabla, hasta la modicacin de una columna o la eliminacin de datos de ella (es decir, procesos de DML y DDL).

Con el n de ejecutar las migraciones, debemos asegurarnos que la base de datos destino exista previamente. Si hemos creado una aplicacin de Rails por default, que utiliza SQLite3, este archivo ser creado automticamente al correr una migracin.

Si usamos, en su lugar, otro manejador, como MySQL o SQLServer, necesitaremos crear previamente la base de datos. Una forma sencilla es realizar la creacin desde nuestro sistema de administracin normal o utlizando las sentencias respectivas de SQL.

Rails nos ofrece, adicionalmente, una manera de crearlas directamente con los datos que posee ya. Para ello, tras asegurarnos que son los correctos (en el archivo cong/database.yml), podemos proceder a ejecutar el comando

rake db:create

El resultado de la ejecucin exitosa del comando es la creacin de una base de datos nueva para el entorno elegido (por defecto produccin). En el caso que queramos crear bases de datos para todos los entornos, podemos utilizar tambin:

xenda :: less pain, more fun http://xendacentral.com

rails db:create:all

Una migracin se generar directamente via el uso del argumento migration enviado al comando rails generate. Requiere un nombre y opcionalmente algunos datos:

rails generate migration NOMBRE_MIGRACION

Por ejemplo

rails generate migration setup_base_data

Rails nos permite adems la posiblidad de aadir nuevos campos a nuestra tabla nombrando la migracin de manera acorde (en una sla lnea):

rails generate migration add_author_id_to_books author_id:integer

En este caso, identicar que tratamos de agregar algo (add_*) a una tabla books (to_*) y utilizar las opciones de nombres y tipos como los datos de la migracin (idntico a como los usamos en los scaffold, por ejemplo).

Para ejecutar la migracin creada e impactarla en la base de datos, utilizaremos el comando

xenda :: less pain, more fun http://xendacentral.com

rake db:migrate

Este comando automticamente consultar la versin del esquema de nuestra base de datos, y tratar de aplicar todas las migraciones nuevas. En caso alguna de ellas falle, se cancelar el proceso, pero las anteriores migraciones que si se aplicaron, se mantendrn en la base de datos.

Si identicamos un error en una migracin y deseamos deshacerla, podemos hacer uso del comando

rake db:rollback

En caso estemos en un proceso de instalacin del sistema en produccin, no se recomiendo ejecutar las migraciones en este nuevo ambiente (ya que cada migracin es un cambio pequeo y pueden haber algunas migraciones que deshagan cambios o corrigan errores menores que no tendra sentido replicar).

En esa situacin, lo que haremos es insertar el esquema nal ya trabajo en la base de datos y para ello utilizaremos el comando

rake db:schema:load

comandos en ambientes distintos


Todos los comandos mencionados previamente se han ejecutado en uno de los ambientes de Rails. Por defecto, este es el ambiente de desarrollo.

xenda :: less pain, more fun http://xendacentral.com

Si queremos ejecutar los comandos en otro (por ejemplo, para probar si la aplicacin funciona correctamente en produccin), se debe establecer la variable de ambiente RAILS_ENV al valor respectivo.

RAILS_ENV=production rails server

Eso iniciara un proceso de servidor en el entorno de produccin.

RAILS_ENV=production rake db:migrate

De manera similar, ese comando correra las migraciones en un entorno de produccin.

You might also like