Ruby Forum Italian Ruby user group > Rails + DB2

Posted by Marco Mastrodonato (marcomd)
on 24.04.2008 11:58
Stavo facendo un applicazione di prova con rails e DB2 per capirne le
potenzialità, continuo su questo forum la mia odissea nel caso possa
servire ad altri.
Premetto che ho avuto non pochi problemi nell'installare la versione
corretta del DB2 connect ma grazie anche all'aiuto di esperti come
Antonio Cangiano ho risolto. In questa discussione si tratta la
questione della connessione:
http://www.ruby-forum.com/topic/123595

Dopo aver verificato l'esito positivo della connessione tra ruby e db2
il passo successivo era l'utilizzo di rails.
Tra i problemi iniziali c'era (e ho tutt'ora) quello dello schema nel
file database.yml

development:
  adapter: ibm_db
  database: ***
  username: ***
  password: ***
  schema: myschema
  host: ***
  port: ***

se lo imposto ottengo questo messaggio

[IBM][CLI Driver][DB2] SQL0567N  "myschema" non è un ID di
autorizzazione valido.  SQLSTATE=42503
 SQLCODE=-567

purtroppo l'ho superato solo tramite una toppa nel modello ma non so se
in futurò avrò problemi per esempio quello che descrivo sotto per
l'update, la toppa è questa:

set_table_name "myschema.mytable"

Un altro problema che ho avuto riguardava l'estrazione dei dati:

@t = Table1.find(:all, :include => :mytable2, :select =>
"myschema.mytable1.ID, myschema.mytable1.CAMPO1,
myschema.mytable1.CAMPO2, myschema.mytable2.ID",
:conditions=>["myschema.mytable1.datains >= ? AND
myschema.mytable1.datains <=
?",params[:ricerca][:data_da],params[:ricerca][:data_a] ] )

Non so se è un baco o sbaglio qualcosa io ma usando quella find,
specificando i campi della select e facendo l'include della seconda
tabella, vengono estratti solo i due campi "id" delle due tabelle, tutti
gli altri non ci sono.

Inizialmente pensavo fosse dovuto alle tabelle molto grosse (con molti
campi), poi girovagando su internet, ho risolto togliendo l'include
della seconda tabella e mettendo questa nella select per far estrarre i
campi:

(Select count(*) From myschema.mytable2 Where myschema.mytable1.id =
myschema.mytable2.mytable1_id)

la find finale completa è diventata questa:

@t = Table1.find(:all, :select => "myschema.mytable1.ID,
myschema.mytable1.CAMPO1, myschema.mytable1.CAMPO2, (Select count(*)
From myschema.mytable2 Where myschema.mytable1.id =
myschema.mytable2.mytable1_id)",
:conditions=>["myschema.mytable1.datains >= ? AND
myschema.mytable1.datains <=
?",params[:ricerca][:data_da],params[:ricerca][:data_a] ] )

L'ho poi sostituita con la paginate ma il succo non cambia.

Attualmente ho un altro problema. Riguarda l'aggiornamento dati ed è
ancora più strano. Si può testare anche nella console, faccio un esempio
che rende meglio:
ruby script/console
Loading development environment (Rails 2.0.2)
>> t=Table1.find(1)
=> #<Table1 >
>> t.autoritarilascio
=> "COMUNE DI                     "
>> t.autoritarilascio="pippo"
=> "pippo"
>> t.save
=> true
>> t.autoritarilascio
=> "pippo"
>> t=Table1.find(1)
=> #<Table1 >
>> t.autoritarilascio
=> "COMUNE DI                     "
>>

t.save ha esito positivo ma non aggiorna il db, il modello si ma il db
no. Guardando il log non effettua l'update, ci sono solo select, cosa
può essere?
Posted by Antonio Cangiano (Guest)
on 25.04.2008 09:29
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco Mastrodonato wrote:
> [...] Attualmente ho un altro problema. [...]

Ciao Marco,

potresti indicarmi le versioni in uso (ibm_db gem, db2 connect, iSeries,
eccetera)? In questo modo posso segnalare i tre problemi riscontrati al
team di sviluppo per cercare di ricrearli nel lab.

Grazie,
Antonio
- --
http://antoniocangiano.com - Zen and the Art of Programming
http://stacktrace.it - Aperiodico di resistenza informatica
http://math-blog.com - Math Blog: Mathematics is wonderful!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkgRiCgACgkQqCqsu0qUj9TltgCgo7n2kFknRfVFF9vIxlRENCR0
xioAn1PUFrmqVVwluUkuYMc+G5lrNO6s
=WF04
-----END PGP SIGNATURE-----
Posted by Marco Mastrodonato (marcomd)
on 28.04.2008 10:40
Ciao Antonio, intanto grazie a te per il continuo supporto!
La versione di ibm_db è la 0.9.2, db connect è la 8.2 fix16, la versione 
server del DB la 8.1
Ibm_db, se usato da solo e fuori da rails non ha mai dato problemi, 
forse potrebbe essere l'adapter?
Ho provato a debuggare ma non è un impresa semplice capire dove NON fa 
l'update, inizialmente pensavo ad una rollback o ad una commit non 
eseguita solo che non trovo l'update, credo non venga proprio eseguita 
altrimenti comparirebbe comunque nel log, dovrebbe.
Posted by Antonio Cangiano (Guest)
on 29.04.2008 17:05
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco Mastrodonato wrote:
| Ciao Antonio, intanto grazie a te per il continuo supporto!
| La versione di ibm_db è la 0.9.2, db connect è la 8.2 fix16, la versione
| server del DB la 8.1
| Ibm_db, se usato da solo e fuori da rails non ha mai dato problemi,
| forse potrebbe essere l'adapter?
| Ho provato a debuggare ma non è un impresa semplice capire dove NON fa
| l'update, inizialmente pensavo ad una rollback o ad una commit non
| eseguita solo che non trovo l'update, credo non venga proprio eseguita
| altrimenti comparirebbe comunque nel log, dovrebbe.
|

Ciao Marco,

se non appare nulla nei log, vuol dire che la query non viene inviata al
db. Ho segnalato i problemi riscontrati al team di sviluppo e vedrò di
tenerti aggiornato sugli svolgimenti nei prossimi giorni.

Ciao,
Antonio
- --
http://antoniocangiano.com - Zen and the Art of Programming
http://stacktrace.it - Aperiodico di resistenza informatica
http://math-blog.com - Math Blog: Mathematics is wonderful!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkgXOQoACgkQqCqsu0qUj9SB0gCdHgEZoZVZDEQWfaDxNaphdnqN
Q04An1tFu3Gk6ghsPnsKDb6GpvPaU8U5
=LpX1
-----END PGP SIGNATURE-----
Posted by Marco Mastrodonato (marcomd)
on 30.04.2008 09:13
Grazie Antonio, gentilissimo come sempre!
Ciao
Posted by Antonio Cangiano (Guest)
on 01.05.2008 15:39
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco Mastrodonato wrote:
|>> t.autoritarilascio
| => "COMUNE DI                     "
|
| t.save ha esito positivo ma non aggiorna il db, il modello si ma il db
| no. Guardando il log non effettua l'update, ci sono solo select, cosa
| può essere?

Ciao Marco,

tanto per togliersi il dubbio, il campo autoritarilascio è :string e non
:text, giusto? Perché c'era un bug coi CLOB che è stato sistemato
dall'update 0.9.4 della gemma.

In ogni caso, potresti provare la nuova gemma e verificare se il
problema sussiste ancora?

Grazie,
Antonio
- --
http://antoniocangiano.com   - Zen and the Art of Programming
http://stacktrace.it         | http://math-blog.com
http://twitter.com/acangiano | http://flickr.com/acangiano
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkgZx9UACgkQqCqsu0qUj9QbDACfVGK0Cik5vfROyidh6QizAskj
bBUAni6YDZR7a30EiY8CwOhet+ZzA55U
=EkpL
-----END PGP SIGNATURE-----
Posted by Antonio Cangiano (Guest)
on 05.05.2008 15:00
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco Mastrodonato wrote:
> 
> [IBM][CLI Driver][DB2] SQL0567N  "myschema" non è un ID di
> autorizzazione valido.  SQLSTATE=42503
>  SQLCODE=-567

Ciao Marco,

Qual'è l'ultima query che appare nei log prima dell'errore?
Se provi a lanciare il comando SET SCHEMA myschema da db2cmd cosa 
ottieni?

Grazie,
Antonio
- --
http://antoniocangiano.com   - Zen and the Art of Programming
http://stacktrace.it         | http://math-blog.com
http://twitter.com/acangiano | http://flickr.com/acangiano
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkgfBKsACgkQqCqsu0qUj9RZ6QCePLjWUCE1bGUDMuOKVG9TKkvb
NIkAn1Q3jgg4a+Ow6VDPfDC1DQ3mlJUB
=Zlij
-----END PGP SIGNATURE-----
Posted by Marco Mastrodonato (marcomd)
on 05.05.2008 18:14
> tanto per togliersi il dubbio, il campo autoritarilascio � :string e non
> :text, giusto? Perch� c'era un bug coi CLOB che � stato sistemato
> dall'update 0.9.4 della gemma.
> 
> In ogni caso, potresti provare la nuova gemma e verificare se il
> problema sussiste ancora?

Ciao Antonio, ho provato l'ultima versione della gemma ma purtroppo il 
problema rimane. Sul DB2, quel campo è un CHAR a lunghezza fissa, 
comunque ho provato anche con dei numerici ottenendo lo stesso 
risultato.

Il log della put è questo, non è completo perchè il numero dei campi è 
altissimo e per praticità ho tagliato la stringa di log:

Processing InquiryController#update_proposta (for 127.0.0.1 at 
2008-05-05 17:59:36) [PUT]
  Session ID: 
BAh7BzoMY3NyZl9pZCIlMzk4YTZlYmYwMGYxYTBiZmU0Yzc4MGMwNTY1YjVh%0AN2UiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOj
  Parameters: 
{"authenticity_token"=>"cc7e4ab7b1579f91abf931d1867841e692b5bfb2", 
"_method"=>"put", "action"=>"update_proposta",
  Proposta Load (0.031000)   SELECT * FROM 
BAY2TEST.TB_PROPOSTE WHERE (BAY2TEST.TB_PROPOSTE.id = '42482') 
Redirected to http://localhost:3004/inquiry
Completed in 0.09400 (10 reqs/sec) | DB: 0.03100 (32%) | 302 Found 
[http://localhost/inquiry/update_proposta]

Brevemente:
Controller:Inquiry
Action:update_proposta
Schema:BAY2TEST
Tabella:TB_PROPOSTE