jueves, 23 de julio de 2009

Actualizar a Rails 2.3

He tenido que actualizar algunas aplicaciones de Rails 1.1.6 a la version 2.3.

La forma más rápida y menos dolorosa, para que funcione todo, aunque no sea una aplicación REST y uses ajax_scaffold, es la siguiente:

instalar rails 2.3:
gem install rails -v=2.3.2 --source=http://gems.rubyonrails.org

renombrar application.rb por application_controller.rb
mv application.rb application_controller.rb

reemplazar el environment.rb por uno nuevo de la rails 2.3
reemplazar el boot.rb por uno nuevo de la rails 2.3

tendrás que reinstalar algunos plugins, e instalar algunos nuevos como classic_pagination para mantener la paginación original, y render_component:

ruby script/plugin install git://github.com/masterkain/classic_pagination.git
ruby script/plugin install git://github.com/lackac/render_component.git -r rails-edge



en las vistas, sustituir todos los:
<%= form_tag ... %>
...
<%= end_form_tag %>

por:
<% form_tag ... do %>
...
<% end %>

lo mismo para los <%= form_remote_tag ... %>


sustituir en vistas y controladores las variables @params y @flash por params y flash

sustituir todas las llamadas a Inflector por ActiveSupport::Inflector

actualizar a la versión nueva de prototype

si tenias mensajes de error de activerecord traducidos en config/initializers/active_record_error_messages.rb, tendrás que hacer lo siguiente:

rm config/active_record_error_messages.rb
vi config/i18n.rb

este fichero contiene:

I18n.load_path += Dir[ File.join(RAILS_ROOT, 'config', 'locales', '*.{yml}') ]
I18n.default_locale = "es" # default language

y en config/locales crear es.yml:

"es":
activerecord:
errors:
templates:
header:
one: "Error: el objeto {{model}} no se ha podido guardar"
other: "{{count}} no se permite guardar {{model}}"
body: "Ha habido problemas con los siguientes campos:"
messages:
accepted: "debe ser aceptado"
blank: "no puede estar en blanco"
confirmation: "no coincide con la confirmación"
...

miércoles, 22 de julio de 2009

SQLServer y Ruby

Después de probar la conexion ODBC contra SQLServer desde Ubuntu, nos queda conectarnos desde rails. Estoy hablando de rails 2.3.2.

Tienes que instalar las siguientes gemas (a la derecha pongo la version que he probado):

sudo gem install activerecord-sqlserver-adapter (2.2.19)
sudo gem install dbd-odbc (0.2.5)
sudo gem install dbi (0.4.2)


Tambien tienes que instalar la libreria odbc de ruby:

sudo apt-get install libdbd-odbc-ruby


Creas una conexion en database.yml:

sqlserver_development:
adapter: sqlserver
mode: odbc
dsn: MISERVIDOR
username: david
password: david


Creas un modelo en app "mi_prueba.rb" con lo siguiente:

class MiPrueba < ActiveRecord::Base
establish_connection("sqlserver_development")
end


Puedes probar en la consola con:

MiPrueba.find :first


lunes, 20 de julio de 2009

SQLServer y Ubuntu

Acabo de conectarme con SQL Server desde Ubuntu.

Hay que instalar los siguientes paquetes:

sudo apt-get install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc

Editar el fichero /etc/freetds/freetds.conf y añadir las siguientes lineas:


[MISERVIDOR]
host = 192.168.1.36
port = 2301
tds version = 7.0

el valor de "tds version" varía en función de la versión de sqlserver que se esté usando. En mi caso es un SQLExpress 2005, asi que "tds version" tiene que ser 7.0. Podeis consultar las versiones aqui:

http://www.freetds.org/userguide/choosingtdsprotocol.htm

En el fichero /etc/odbc.ini:

[MISERVIDOR]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Servername = MISERVIDOR
Database = prueba_development
Trace = No
UID = david
pwd = david


He tenido problemas porque el SQL Server del que dispongo es una version SQLExpress 2005, que no admite conexiones remotas por defecto. En el panel de control de SQL Server Configuration Manager, hay que habilitar las conexiones remotas.

Si no se accede por el browser de nombres de SQLServer, tienes que definir un puerto en SQL Server Configuration Manager => Protocols for SQLExpress => TCP/IP, en "IP All" => TCP Dynamic Ports. Ahí he definido el puerto 2301, que es el que aparece en el fichero /etc/freetds/freetds.conf.

Para probar la conexion basta con ejecutar:

sqsh -S MISERVIDOR -U david -P david

Si aparece ">1" es que te has conectado. Ahora puedes ejecutar:

use prueba_development
go
select * from mitabla
go

Con la utilidad iodbcadm-gtk, tambien puedes crear el dsn. Primero tienes que definir el driver, diciendole que el fichero del driver es:
/usr/lib/odbc/libtdsodbc.so

y el fichero de setup es:
/usr/lib/libtdsS.so

Luego defines el dsn con ese driver y pruebas la conexion.