Rails + DB2

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 C. 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)
=> #
t.autoritarilascio
=> "COMUNE DI "
t.autoritarilascio=“pippo”
=> “pippo”
t.save
=> true
t.autoritarilascio
=> “pippo”
t=Table1.find(1)
=> #
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?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco M. 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-----

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.

Grazie Antonio, gentilissimo come sempre!
Ciao

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco M. 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-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco M. 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 | Tony Cangiano | Flickr
-----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-----

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Marco M. 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 | Tony Cangiano | Flickr
-----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-----

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”,
e[4;35;1mProposta Load (0.031000)e[0m e[0mSELECT * FROM
BAY2TEST.TB_PROPOSTE WHERE (BAY2TEST.TB_PROPOSTE.id = ‘42482’) e[0m
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