Apuntes Rails

Apuntes de Ruby on Rails, programación en GNU/Linux y Mac

Relacionar tablas en las Migrations ( Foreign Key Migrations )

TAGS: None

Cuando creamos las tablas desde las migrations y queremos relacionar una tabla con otra mediante una clave esterna, tenemos que crear “a mano” esas llaves.

Gracias al plugin Foreign Key Migration de RedHill esto nos lo hace de forma automática la ejecutar db:migration. Teneis la documentación del plugin aquí.

Solo tenemos que instalar el plugin

ruby script/plugin install http://www.redhillonrails.org/svn/branches/stable-1.2/vendor/plugins/foreign_key_migrations

Y también el RedHill on Rails Core

ruby script/plugin install http://www.redhillonrails.org/svn/branches/stable-1.2/vendor/plugins/redhillonrails_core
Nota: Si falla comprueba que todas las tablas a las que haces referencia en las definiciones de la migración han sido creadas anteriormente.

A la hora de ver si todo ha funcionado correctamente podemos usar la aplicación DbVisualizer que nos crea unos bonitos gráficos con las tablas relacionadas.

Actualización: 

Si no quieres instalar un plugin puedes seguir los pasos de este post en el que explica como crear un Helper para las migrations. Creo que es mas sencillo y práctico de esta manera. :P

Mi nuevo Mac (Configurando para trabajar)

TAGS: None

Ahora voy a ir poniendo algunas de las cosas que estoy haciendo para poder programar con mi Mac.

FINK

Lo primero es instalar FINK. Es algo parecido al apt de Debian. Nos bajamos un paquete y lo instalamos.

A partir de ahora desde un terminal pondremos hacer lo siguiente:

fink list svn o fink install svn-client

Para actualizar los paquetes ponemos :

fink selfupdate

Fink nos ayudará a instalar programas mas adelante.

TEXTMATE

El próximo paso es instalar un editor de textos potente.

TEXTMATE es el mejor editor que podemos instalar. (Recursos: Textmate en castellano, mini manual).

MYSQL

Ahora nos ponemos con la base de datos MySQL. Instalamos Mysql usando fink.

fink install mysql

Otra opción es descargarnos el paquete de MySQL desde su web (incluye un plugin para las preferencias del sistema) y las utilidades de administración.

Unos buenos administradores para la base de datos totalmente gratuitos son: DbVisualizer y CocoaMySQL
Ruby on Rails

Ya solo nos falta poder trabajar con Rails. Si queremos empezar de forma rápida (que es el caso) podemos descargarnos Locomotive, el entorno Rails con solo instalar una aplicación. Para usar RMagick disponemos de un bundle que se copia en la carpeta correspondiente.

Otra opción es instalar las rubygems y descargar rails poniedo:

gem install rails --include-dependencies

APACHE + PHP
Si queremos usar apache con php lo instalaremos usando fink. :P fink install apacher2

después configuramos el archivo /etc/httpd/httpd.conf como nos indican aquí.
Para iniciar apache basta con poner en el terminal -> apachectl star

Ya tenemos apache con php ahora a bajarse phpmyadmin

Por defecto el directorio de apache es /Library/WebServer/Documents

Mi nuevo Mac (Aplicaciones básicas)

TAGS: None

Ya tengo por fin el mac en casa. Voy a poner una lista de aplicaciones que te ayudarán a trabajar con tu Mac.
LibreríasX11 -> Son necesarias para algunas aplicaciones. Las puedes instalar desde el DVD de instalación del sistema

Firefox -> Lo primero, un buen navegador para bajarme le resto de cosillas

Adium -> Cliente de mensajería

ITerm -> Terminal muy potente para Mac (Esencial para programar)

QuickSilver -> Lanzador de aplicaciones y buscador de TODO en el mac (Esencial)

Growl -> Notificador de eventos en el Mac

Onyx -> Optimizador el sistema

Stuffit Expander -> Compresor / Descompresor

VLC -> Visor de video

Gimp -> Programa de retoque fotográfico (Necesario tener las X11 instaladas)

OpenOffice.org -> Suite ofimática (Necesario tener las X11 instaladas)

También son muy útiles los siguientes Widgets:

DoBedo -> Para gestionar la lista de tareas pendientes (ToDo) de iCal

IStatPro -> Monitor del sistema

Amazon Album Art -> Para ponerle las carátulas a tus discos en iTunes.

Album Art -> Otra alternativa al widget anterior

A parte os pongo algunas web interesantes sobre mac:

Applesfera, faq-maq, Top 10 app, coolosxapp, sof. libre para mac,

Nokia 6288 iSync 2.4 MacOs X 10.4.9

TAGS: None

Al parecer el modelo de Nokia 6288 no está soportado por la versión 2.4 de iSync, algo extraño ya que el modelo 6280 si está soportado y es prácticamente igual. Buscando por los foros de la web de Nokia encontré esta entrada que paso a resumir.

Consiste en duplicar la configuración del Nokia 6280 del iSync cambiándole solo el nombre por Nokia 6288. Es muy muy sencillo.

Solo tenemos que editar el siguiente archivo:

:/Applications/iSync.app/Contents/PlugIns/ApplePhoneConduit.syncdevice/Contents/PlugIns/PhoneModelsSync.phoneplugin/Contents/Resources/ MetaClasses.plist

Por último duplicamos la imagen NOK6280.tiff y le ponemos el nombre NOK6288.tiff o bien os bajáis la siguiente imagen

Insertar datos en la BD usando las migrations de Rails

TAGS: None

A veces cuando creamos una tabla a través de las migrations de Rails es necesario meterle algunas filas por defecto. Este es un ejemplo de como hacerlo.

Creamos una migración usando

./script/generate migration datos_personas

Esto nos creará un archivo en db/migrate que es el que tenemos que modificar. Por ejemplo

008_datos_personas.rb

class DatosPersonas < ActiveRecord::Migration
def self.up
end

def self.down
end
end

Para poder insertar los campos en la tabla personas debemos definir el modelo que controla la tabla dentro de la migracion

class DatosPersonas < ActiveRecord::Migration

class Personas < ActiveRecord::Base
end

def self.up

create_table :personas do |tabla|

tabla.column :nombre, :string
tabla.column :apellidos, :string
tabla.column :edad, :integer

end

Personas.new( :nombre => “Pedro”, :apellidos => “Marin”, :edad=29).save

end

def self.down

drop_table :personas

end
end

Es así de fácil. Los datos que podemos usar son:

:integer
:float
:datetime
:date
:timestamp
:time
:text
:string
:binary
:boolean

Y las acciones que podemos ejecutar:
create_table(name, options)
drop_table(name)
rename_table(old_name, new_name)
add_column(table_name, column_name, type, options)
rename_column(table_name, column_name, new_column_name)
change_column(table_name, column_name, type, options)
remove_column(table_name, column_name)
add_index(table_name, column_name, index_type)
remove_index(table_name, column_name)

Archivos de configuración con YAML para varios idiomas

TAGS: None

Creando una web me he encontrado con el problema de poner determinados textos en varios idiomas. Sin querer meterme en muchos follones (hay plugin para ello) y buscando una solución muy sencilla y rápida, un compañero de la lista de Rails me sugirió YAML. (Aquí y aquí hay información de YAML en Ruby)
El objetivo es el siguiente. Necesito un hash con los los textos que quiero poner en varios idiomas. Por ejemplo:

Español: { “menu_inicio” => “Inicio”, “listado_personas”=>”Listado Personas” }

Ingles: { “menu_inicio” => “Home”, “listado_personas”=>”List of Persons” }

Lo que quiero es guardar los datos de cada idioma en un archivo, y dependiendo del idioma seleccionado, cargar un archivo u otro. ok?

Creamos una carpeta lang donde guardar los siguientes archivos en formato YAML.
es.yml

menu_inicio: “Inicio”

listado_personas: “Listado de Personas”

en.yml

menu_inicio: “Home”
listado_personas: “List of Persons”


Ahora vamos a preparar la aplicación para cargue el archivo dependiendo del idioma. Modificamos el controlador principal de la aplicación.

application.rb

require ‘yaml’ # Necesario NO OLVIDAR!!!!

class ApplicationController < ActionController::Base

def idioma

@idioma = actualiza_idioma #funcion que captura si se ha cambiado de idioma. Por defecto devuelve 1
#Dependiendo del idioma cargamos un archivo u otro
case @idioma.to_i

when 1 then archivo = “es.yml”
when 2 then archivo = “en.yml”

end

@lang = YAML::load(File.open(”#{RAILS_ROOT}/lang/#{archivo}”))

end

Bien así de sencillo. Ahora en cualquier vista podemos poner <%=lang['menu_inicio'] %> y nos lo mostrará en el idioma seleccionado.

PD: Se me olvidaba, tenemos que poner en los controladores before_filter :idioma para que ejecute la función

Creación de un proyecto Rails usando Subversion

TAGS: None

Estos son unos apuntes personales sobre la creación de un proyecto en rails usando subversion (sistema de control de versiones). Si buscas, seguro encontrarás artículos mas completos que este. ;)
Vamos a crear una base de datos vacía para el proyecto (Las tablas las crearemos usando migration)

mysqladmin -u root create inmobiliaria

Suponiendo instalado RoR (Ruby on Rails) en tu ordenador creamos un proyecto

rails inmobiliaria

Esto nos crea la estructura básica para nuestro proyecto. Ahora vamos a configurar el acceso a nuestra base de datos. Editamos el archivo inmobiliaria/config/database.yml

development:
adapter: mysql
database: inmobiliaria
socket: /var/run/mysqld/mysqld.sock
username: peluo
password: atitelovoyadecir
host: localhost

Importante: Dependiendo del sistema operativo, tendrás que especificar la ubicación del socket de mysql.

Bien, supuestamente ya tenemos una aplicación conectada a nuestra base de datos.

Para ver que todo está bien ejecutamos ./script/server y nos metemos en http://localhost:3000

Es hora de ponernos con subversion.(Como instalar subversion, Subversion en 28 segundos, Introduccion a subversion )

En el servidor donde vayamos a crear el repositorio creamos la carpeta donde guardaremos todos los datos.

Por ejemplo creamos /var/lib/svn.

Ahora dentro de esa carpeta ejecutamos svnadmin create inmobiliaria. Esto nos creará una estructura vacía.

Ahora tenemos que rellenar esta estructura. Desde el ordenador cliente, donde hemos creado el proyecto rails, ejecutamos:

svn import inmobiliaria svn+ssh://direccion_servidor/var/lib/svn/inmobiliara

o

svn import inmobiliaria http://direccion_servidor/svn/inmobiliara

(Depende como hayamos configurado el servidor)

o

svn import inmobiliaria file:///var/lib/svn/inmobiliaria si lo hacemos desde el propio servidor

Ya tenemos los datos en el repositorio. Para empezar a trabajar tenemos que descargarnos los datos desde el servidor (no nos vale la estructura del proyecto que tenemos ya que no la controla subversion). Movemos el proyecto a por ejemplo inmobiliaria_old y ejecutamos:

svn co http://direccion_servidor/svn/inmobiliara inmobiliaria

Ya tenemos el proyecto bajo el control de subversion. Ahora solo falta aplicar los comandos de este articulo -> Como usar Rails con Subversion

SVN y servidores con IP dinámicas

TAGS: None

Bueno, este es el problema que he tenido. Tengo el servidor de subversion en mi casa y desde otro ordenador actualizo el código con un svn up.

El problema se presenta cuando cambian la ip de mi acceso a internet. Al crear la primera copia del repositorio usé el comando

svn co http://80.123.123.123/svn aplicacion.

Al cambiar me la IP subversion sigue buscando en la ip anterior. Mirando la documentación me encuentro el subcomando sw y se supone que haciendo esto

svn sw http://ip_nueva/svn aplicacion

debería cambiarme la ip del repositorio del cliente, pero por alguna razón no funciona (y mira que he probado cosas).

Solución que le he dado. He echado mano del archivo /etc/host del ordenardor del cliente. He puesto la siguiente linea.

80.123.123.123 servidor_svn

y he vuelto a descargar el repositorio

svn co http://servidor_svn/svn aplicacion

Ahora, cada vez que cambie la IP de mi servidor, solo tengo que modificar el archivo host.

Creación de VideoTutoriales con WinK

TAGS: None

Una herramienta muy útil y fácil de usar para crear videotutoriales. (Y funciona perfectamente en el centro guadalinfo)

Podéis visitar su página. http://www.debugmode.com/wink/

Y este es un ejemplo muy tonto de lo que se puede hacer en unos minutos.

http://ourproject.org/docman/view.php/316/437/ejemplo.htm

Creo que es una utilidad muy útil para crear cursos on-line.

© 2009 Apuntes Rails. All Rights Reserved.

This blog is powered by Wordpress and the Magatheme Wordpress Theme by Mid MO SEO.