Forum: Rails-ES Transacciones

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7f82e7eaa0037b12d844f888afd0398c?d=identicon&s=25 Dani Doni (Guest)
on 2008-10-24 10:23
(Received via mailing list)
Hola chicos,
estoy desarrollando un pequeño script de migración ( no es una
aplicación rails ) usando ActiveRecord, para una tabla de una base de
datos "legacy" a una tabla "standard".
Estoy probando de usar transacciones y el siguiente ejemplo no me
funciona:

#!/usr/bin/env ruby

require 'rubygems'
require 'activerecord'

$config = YAML.load_file(File.join(File.dirname(__FILE__),
'database.yml'))

class TotSonaDB < ActiveRecord::Base
    establish_connection $config['tot-sona']
end

module TotSona

    class Client < TotSonaDB

        set_primary_key :cli_codi
        set_table_name  :clients

    end

end

TotSona::Client.transaction do
    client = TotSona::Client.find(:first)
    client.cli_email = "__SHOULD_NOT_BE_UPDATED__"
    client.save!
    raise ActiveRecord::Rollback
end

Mi database.yml es como sigue:


'tot-sona'      :
  adapter       : mysql
  host          : localhost
  username      : test
  password      : test
  database      : tot-sona
  socket        : /var/run/mysqld/mysqld.sock

cli_email està vacio antes de la ejecución, pero despues de lanzar el
script està actualizado, por tanto el raise no acaba de funcionar.

He buscado en "un conocido buscador que empieza por G" y he visto que
la sintaxis de arriba es la correcta, por lo que no se por donde van
los tiros...

Info:
ActiveRecord 2.1.1
ruby 1.8.6
mysql 5.0.51a
Ubuntu 8.04.

Si alguien sabe algún recurso que explique gestión de transacciones,
lo agradecería inmensamente.
49b6123803e4f327144e991daab62f77?d=identicon&s=25 Daniel Rodriguez Troitiño (Guest)
on 2008-10-24 10:54
(Received via mailing list)
2008/10/24 Dani Doni <dani.doni@gmail.com>:
> end
> end
>
> 'tot-sona'      :
>  adapter       : mysql
>  host          : localhost
>  username      : test
>  password      : test
>  database      : tot-sona
>  socket        : /var/run/mysqld/mysqld.sock
>

Crea un logger con nivel debug apuntando a STDERR y establecelo como
el logger de TotSonaDB, a ver que SQL está emitiendo ActiveRecord.

Por otro lado si es una base de datos antigua y las tablas de MySQL
utilizan el engine MyISAM, lo siento pero no tienes suerte: MyISAM no
soporta transacciones, InnoDB sí. Supongo que tendrías que
convertirlas de un engine al otro.
Bc309914890c202136d6964cb3033ceb?d=identicon&s=25 cartuchoGL (Guest)
on 2008-10-24 11:25
(Received via mailing list)
Dani Doni escribió:
>
>         set_primary_key :cli_codi
>     raise ActiveRecord::Rollback
>   database      : tot-sona
>   socket        : /var/run/mysqld/mysqld.sock
>
> cli_email està vacio antes de la ejecución, pero despues de lanzar el
> script està actualizado, por tanto el raise no acaba de funcionar.
>
> He buscado en "un conocido buscador que empieza por G" y he visto que
> la sintaxis de arriba es la correcta, por lo que no se por donde van
> los tiros...
>
Te refieres a la sintaxis del database.yml o de la transaccion?

Creo que esta no es la forma de usar transacciones en rails mira [1].

[1] http://wiki.rubyonrails.org/rails/pages/HowToUseTransactions

Un saludo.
9b3b1fd6baa8379638d8399ecd60045d?d=identicon&s=25 Emili Parreño (emili)
on 2008-10-24 12:07
(Received via mailing list)
Seguramente sea el tipo de tabla, para tener transcacciones debes usar
InnoDB


El 24/10/2008, a las 10:22, Dani Doni
escribió:
> require 'activerecord'
>    class Client < TotSonaDB
>    client.cli_email = "__SHOULD_NOT_BE_UPDATED__"
>  username      : test
>
> Doni
> _______________________________________________
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es

---
"Nos gustaría cambiar el mundo, pero no tenemos el código fuente"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Emili
Parreñowww.eparreno.com
www.abecedata.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7f82e7eaa0037b12d844f888afd0398c?d=identicon&s=25 Dani Doni (Guest)
on 2008-10-24 12:09
(Received via mailing list)
On Fri, Oct 24, 2008 at 10:53 AM, Daniel Rodriguez Troitiño
<notzcoolx@yahoo.es> wrote:
> Por otro lado si es una base de datos antigua y las tablas de MySQL
> utilizan el engine MyISAM, lo siento pero no tienes suerte: MyISAM no
> soporta transacciones, InnoDB sí. Supongo que tendrías que
> convertirlas de un engine al otro.
Argh! Horror!
Son todas MyISAM. La tabla es propiedad del cliente y probablemente no
pueda cambiar el motor.
7f82e7eaa0037b12d844f888afd0398c?d=identicon&s=25 Dani Doni (Guest)
on 2008-10-24 12:09
(Received via mailing list)
2008/10/24 Emili Parreño <emili@eparreno.com>:
> Seguramente sea el tipo de tabla, para tener transcacciones debes usar
> InnoDB
Yep, es el tipo de tabla.
7223c62b7310e164eb79c740188abbda?d=identicon&s=25 Xavier Noria (fxn)
on 2008-10-24 17:00
(Received via mailing list)
Si tienes MyISAM y necesitas abortar la migracion aun puedes guardarte
los IDs de registros creados y hacer bulk DELETES a mano en caso de
problema.
7f82e7eaa0037b12d844f888afd0398c?d=identicon&s=25 Dani Doni (Guest)
on 2008-10-24 17:13
(Received via mailing list)
2008/10/24 Xavier Noria <fxn@hashref.com>:
> Si tienes MyISAM y necesitas abortar la migracion aun puedes guardarte
> los IDs de registros creados y hacer bulk DELETES a mano en caso de
> problema.
Esta es buena, me la apunto.
This topic is locked and can not be replied to.