Ruby on rails, sqlserver 6.5 e tabella esistente

Ciao a tutti,
ho scoperto da poco Ruby on rails, ho letto qualche libro è sono rimasto
piacevolmente sorpreso dalla potenza di questo framework.
Ho fatto qualche esperimento, aiutato dai codici presenti sui libri e
tutto è andato bene…poi ho deciso di camminare con le mie gambe e
allora ho pensato di leggere e modificare i valori di un database Ms Sql
server 6.5 di un altro progetto e lì si sono riscontrati i miei
problemi…
Vi spiego meglio…
volevo poter connettere rails a questo database e visualizzarne i dati,
ovviamente le tabelle sono già presenti e quindi servirebbe un qualcosa
tipo scaffold ma al contrario…
Dato che il database è vecchio, c’è difficoltà ad avere il driver jdbc
adatto così ho pensato di utilizzare un ponte odbc. A tutt’oggi non sono
riuscito a effettuare la connessione, anche se ho provato vari
metodi…con java e i driver odbc invece, ci riesco benissimo.
Con ruby on rails non sono riuscito a capire come effettuare la
connessione odbc e sopratutto come verificare che realmente funzioni…

sapete indicarmi quali sono le eventuali gemme da installare o come
procedere per effettuare una connessione a questo db?

Eventualmente si può, per esempio, impostare la connessione in java e
poi passare tale connessione a rails? eventualente come si dovrebbe
procedere?

help…
Ciaooo

2010/9/28 Salvatore P. [email protected]

Eventualmente si può, per esempio, impostare la connessione in java e
poi passare tale connessione a rails? eventualente come si dovrebbe
procedere?

Se il tuo problema lo risolvi in java ma vuoi usare rails potresti
pensare
ad usare jruby.
In questo modo hai un modo per accedere a classi java utilizzando ruby
come
linguaggio.

Paolo

“… static analysis is fun, again!”

OWASP Orizon project leader, http://github.com/owasp-orizon
Owasp Italy R&D director

Se il tuo problema lo risolvi in java ma vuoi usare rails potresti
pensare
ad usare jruby.
In questo modo hai un modo per accedere a classi java utilizzando ruby
come
linguaggio.

Purtroppo ho tentato di provare anche jruby, ma in realtà non ho ben
capito come funziona, e quindi ho abbandonato subito…
jruby serve ad:
usare codice ruby su java o utilizzare codice java su ruby?
dalla tua risposta sembrerebbe il primo caso…

Grazie
ciao

2010/9/28 Sal P. [email protected]

jruby serve ad:
usare codice ruby su java o utilizzare codice java su ruby?
dalla tua risposta sembrerebbe il primo caso…

Jruby ti permette di chiamare le classi java dentro un jar in una classe
ruby.

Potrebbe essere una soluzione, tu ti scrivi il tuo pezzo di codice java
che
fa l’accesso al DB ed esponi delle API e poi accedi alle API in ruby.

Paolo


“… static analysis is fun, again!”

OWASP Orizon project leader, http://github.com/owasp-orizon
Owasp Italy R&D director

2010/9/28 Sal P. [email protected]

…unica cosa, eventualmente sei disposto a darmi una mano se riscontro

dei problemi? :slight_smile:

Ciao Salvatore, mah… sono disposto come tutti quelli che leggono questa
mailinglist.
Paolo


“… static analysis is fun, again!”

OWASP Orizon project leader, http://github.com/owasp-orizon
Owasp Italy R&D director

Paolo P. wrote:

Ciao Salvatore, mah… sono disposto come tutti quelli che leggono questa
mailinglist.
Ok :slight_smile:

Sto cercando di leggere e studiare jruby, nel frattempo mi sono
imbattuto in questo esempio di codice:

require ‘rubygems’
require ‘active_record’
ActiveRecord::Base.establish_connection(:adapter => “sqlite3”,
:database => “blog/db/development.sqlite3”,
:timeout => 5000)
class Article < ActiveRecord::Base
end
p Article.find(:all)

in pratica dovrebbe stampare tutti i record di una tabella article…mi
chiedevo una cosa, come si fa a far stampare a video la stringa di
connessione che il metodo establish_connection genera?

ciao

jruby serve ad:
usare codice ruby su java o utilizzare codice java su ruby?
dalla tua risposta sembrerebbe il primo caso…

Jruby ti permette di chiamare le classi java dentro un jar in una classe
ruby.

Potrebbe essere una soluzione, tu ti scrivi il tuo pezzo di codice java
che
fa l’accesso al DB ed esponi delle API e poi accedi alle API in ruby.

Paolo

mi piace :-), potrebbe essere la soluzione definitiva, perchè a parte la
connessione (che comunque è già pronta in java) tutto il resto viene
fatto con rails…
…unica cosa, eventualmente sei disposto a darmi una mano se riscontro
dei problemi? :slight_smile:

Ciao

Marco M. wrote:

Ciao,
secondo me per un neofita è più indicato rimanere nell’ambito ruby
classico.
Per la tua versione SqlServer piuttosto vecchiotta, potresti provare le
vecchie versioni di driver ADO, prova la 1 o giù di li, se non la trovi
te la posso inviare x mail. Ricordo che c’era anche un altra gemma per
gestire le chiavi multiple.
Dalla 2 si utilizza odbc ma offre il supporto dalla versione 2000 in su.
Attualmente lo sviluppo è giunto alla 3 e si parte dalla versione 2005.

Rails SQL Server · GitHub
activerecord-sqlserver-adapter | RubyGems.org | your community gem host

Ti crei lo scheletro con lo scaffold, non esegui le migrations, ti
sistemi a mano i modelli impostando il nome delle tabelle e delle chiavi
per le relazioni e dovresti essere pronto per iniziare.

ciao Marco,
allora dovrei:
1- trovare driver ADO v1
2- installare rails-sqlserver
3- installare activerecord-sqlserver-adapter
4- fare lo scaffold (vuoto? cioè senza “:id …” ecc)
5- creare i models per ogni tabella

ho capito bene?
anche se gli ultimi passaggi non so bene come farli…

Ciao,
secondo me per un neofita è più indicato rimanere nell’ambito ruby
classico.
Per la tua versione SqlServer piuttosto vecchiotta, potresti provare le
vecchie versioni di driver ADO, prova la 1 o giù di li, se non la trovi
te la posso inviare x mail. Ricordo che c’era anche un altra gemma per
gestire le chiavi multiple.
Dalla 2 si utilizza odbc ma offre il supporto dalla versione 2000 in su.
Attualmente lo sviluppo è giunto alla 3 e si parte dalla versione 2005.

http://rubygems.org/gems/activerecord-sqlserver-adapter

Ti crei lo scheletro con lo scaffold, non esegui le migrations, ti
sistemi a mano i modelli impostando il nome delle tabelle e delle chiavi
per le relazioni e dovresti essere pronto per iniziare.

Ciao,
non ho mai cercato di creare in automatico il progetto da tabelle
esistenti, nei pochi casi in cui dovevo usare tabelle vecchie e fuori
convenzione ho sempre creato la struttura con lo scaffold, inserendo
quindi i nomi dei campi. Prova a googlare per capire se si può.

Una precisazione: nello scaffold non serve specificare informazioni
sotto convenzione, nel tuo caso l’id.

Ricevi un errore perchè stai utilizzando driver non adatti alla tua
versione di sqlserver. Se hai stabilito la connessione non significa che
poi riuscirai a lavorarci.
Se è solo un problema di CREATE poco male, tanto le tabelle le hai giÃ
…ma ci sono molte probabilità che non funzioni il resto. Fai come ti
ho detto, prova la versione 1 ADO. Se poi continui ad avere problemi
allora potrebbe essere necessario modificare il driver, io ho dovuto
farlo tante volte, posso darti qualche dritta. Però ti conviene partire
modificando un versione di driver il più vicino possibile al tuo server,
la 1 appunto.

Piccoli passi avanti…

sono riuscito ad effettuare la connessione, tramite driver jtds e jruby
(su ide netbeans)…adesso riesco a leggere le tabelle…
ho eseguito il comando rake db:schema:dump che mi ha creato il file
schema.db con lo schema del db esistente, che per quello che ho capito
dovrebbe risultare utile per:

Ti crei lo scheletro con lo scaffold, non esegui le migrations, ti
sistemi a mano i modelli impostando il nome delle tabelle e delle chiavi
per le relazioni e dovresti essere pronto per iniziare.

solo che adesso non ho capito bene come procedere. Dovrei crearmi i
modelli manualmente con i campi del db (che adesso possiedo grazie al
dump)?
e poi, cosa resta da fare?..

ps per provare, ho creato uno scaffold in questo modo:

script/generate scaffold person :id primary_key first_name:string
last_name:string

quando provo a fare ‘Migrate Database’ ottengo questo errore:

ActiveRecord::ActiveRecordError: Line 1: Incorrect syntax near ‘[’.:
CREATE TABLE people ([id] int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
[first_name] NVARCHAR(255), [last_name] NVARCHAR(255), [created_at]
datetime, [updated_at] datetime)
l’errore è dato da sqlserver che non riesce a ‘capire’ le parentesi
quadre…cosa dovrei fare?

Ricevi un errore perchè stai utilizzando driver non adatti alla tua
versione di sqlserver. Se hai stabilito la connessione non significa che
poi riuscirai a lavorarci.
Se è solo un problema di CREATE poco male, tanto le tabelle le hai giÃ
…ma ci sono molte probabilità che non funzioni il resto. Fai come ti
ho detto, prova la versione 1 ADO. Se poi continui ad avere problemi
allora potrebbe essere necessario modificare il driver, io ho dovuto
farlo tante volte, posso darti qualche dritta. Però ti conviene partire
modificando un versione di driver il più vicino possibile al tuo server,
la 1 appunto.

Ciao,
allora devo chiederti se puoi passarmi il link dove scaricare il driver,
perchè io girando su internet non sono riuscito a trovare quella
versione.
Sai anche qual’è la sintassi per la stringa di connessione?
Una volta preso il driver, installo le gems che mi dicevi e dovrebbe
andare, giusto?
scusa il disturbo…

Grazie
ciao

Ciao, l’avevo installata molto tempo fa, sinceramente non ricordo da
dove comunque l’ho tenuta. Se mi dai la tua email te la invio. E’
piccola: 10k.

Marco M. wrote:

Ciao, l’avevo installata molto tempo fa, sinceramente non ricordo da
dove comunque l’ho tenuta. Se mi dai la tua email te la invio. E’
piccola: 10k.

Grazie Marco :slight_smile:
per provare la connessione ho provato ad eseguire un file di prova

ActiveRecord::Base.configurations = {
‘prova’ => {

:adapter => 'sqlserver',
:host => 'localhost',
:username => 'sa',
:database => 'database'

}
}

ActiveRecord::Base.establish_connection ‘prova’

e così funziona…
se inserisco la stessa configurazione nel progetto rails:
development:
host: localhost

  adapter: sqlserver
  database: database
  username: sa
  password:
  schema: dbo

così non si connette, le gems sono state regolarmente inserite nel
progetto, che può essere secondo voi, ancora questione di parametri di
stringa?

ciao

2010/10/1 Sal P. [email protected]

Marco M. wrote:

Ciao, l’avevo installata molto tempo fa, sinceramente non ricordo da
dove comunque l’ho tenuta. Se mi dai la tua email te la invio. E’
piccola: 10k.

Torno un attimo sul topic, grazie al podcast di ruby5 ho scoperto
l’esistenza di tinytds, una gemma per connettersi a database come SQL
Server.

Magari fa al caso tuo Salvatore.

Paolo

“… static analysis is fun, again!”

OWASP Orizon project leader, http://github.com/owasp-orizon
Owasp Italy R&D director

Sono interessato alla lettura delle tabelle sqlserver, ho letto che
esiste tinytds che è utile allo scopo ma non mi è chiaro come
funziona dove si può trovare, come si installa e quindi come si
utilizza.

Inoltre il comando rake db:schema:dump veramente creerebbe il file
schema.db con lo schema del db sqlserver esistente ?

Scusatemi se “mi permetto” questo comando funziona anche con un .mdb
di ACCESS ?
Esiste una GEMMA per connettersi ad ACCESS ? anche da RAILS ?

Grazie dell’aiuto e dei chiarimenti che possono esser aggiunti alla
lista.

ciao a tutti
fstilo