Incapace di uscita tabelle di MySQL che coinvolgono le date in Sequel
Domanda
Sto cercando di usare Sequel per accedere a un database MySQL in Ruby. Quando provo si accede a un tavolo che coinvolge una colonna di data, mi sono presentato con un errore. Quando accedo un tavolo senza, funziona bene. Cosa c'è di sbagliato?
CodiceEsempio:
require 'rubygems'
require 'sequel'
DB = Sequel.connect(:adapter=>'mysql', :host=>'localhost', :database=>'db', :user=>'user', :password=>'password')
event = DB[:table]
puts event.all
Errore:
/usr/lib/ruby/1.8/date.rb:956:in `new_by_frags': ArgumentError: invalid date (Sequel::InvalidValue)
L'errore non viene visualizzato quando una tabella che non dispongono di una data si accede. Questo è in esecuzione su Debian.
Soluzione
Ho avuto lo stesso problema. E 'stata causata da soffocamento sul Sequel di MySQL data zero ‘0000-00-00’. La soluzione che ho usato è stato quello di impostare
Sequel::MySQL.convert_invalid_date_time = nil
(che si trova qui: http://groups.google.com/ gruppo / sequel-talk / browse_thread / thread / 152a4131bd280966 ).
Se si controlla il DB, si potrebbe anche evitare la memorizzazione di MySQL a zero date utilizzando la modalità NO_ZERO_DATE SQL: http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_no_zero_date .
Altri suggerimenti
Heads up:
Sequel::MySQL.convert_invalid_date_time = nil
non funziona più, ma ho appena risolto questo stesso problema impostando l'opzione sul mio oggetto DB:
DB = Sequel.connect("mysql://localhost/#{DB_NAME}")
DB.convert_invalid_date_time = nil
Spero che questo aiuti qualcun altro!
La soluzione finale ha coinvolto il passaggio di utilizzare la data_objects rubino gemma. Ciò ha evitato i problemi usando il driver nativo C MySQL.
Il codice è regolato come segue:
require 'rubygems'
require 'sequel'
# connect to the db
DB = Sequel.connect('do:mysql://user:pass@localhost/database')
Forse questo potrebbe causare problemi di prestazioni, ma questo va oltre lo scopo del mio problema iniziale.
Grazie a lexu per commentare la domanda iniziale.