NoMethodError: undefined method each' for #<Mysql:0x371e3c0> from c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_ada pters/mysql_adapter.rb:292:incolumns’
from
c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:696:in columns' from c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:704:incolumns_hash’
from
c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1562:i
n column_for_attribute' from c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1801:i nread_attribute’
from
c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1489:i
n `[]’
from (irb):5
ActiveRecord::StatementInvalid: Mysql::Error: Commands out of sync; you
can’t run this command now:
SELECT Destination_ID, Name_VC FROM refdestinations LIMIT 1
from
c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_ada
pters/abstract_adapter.rb:120:in log' from c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_ada pters/mysql_adapter.rb:184:inexecute’
from
c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_ada
pters/mysql_adapter.rb:336:in select' from c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/connection_ada pters/mysql_adapter.rb:175:inselect_all’
from
c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:390:in find_by_sql' from c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:924:infind_every’
from
c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:918:in find_initial' from c:/opt/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:380:infind’
from (irb):6[/code]
Co ciekawsze, u kolegi na biurku nie ma błędów. Wpierw myślałem że to może dlatego, że mam nowszą wersję Rubiego 1.8.5 zamiast 1.8.4, ale zrobiłem donwgrade i nic nie pomogło. Dla pewności wyczyściłem stare gemy aby mieć na obu kompach to samo (gem cleanup; gem update). Na obu pc jest taki sam winxp, ruby 1.8.4, rails 1.1.6, mysql 5.0.24, no kurcze wszystko to samo. U niego działa, u mnie się wywala.
jak wpisuje w formularzu tekst bez polskich znakow diakrytycznych (ą ż ź itd …) - dane z formularza sa zapisywane do bazy
jak wpisuje w formularzu tekst z polskimi - wywala blad:
[quote]ActiveRecord::StatementInvalid
(Mysql::Error: #22001Data too long for column ‘content’ at row 1:
INSERT INTO news (title, date, content, link)
VALUES(‘Pierwszy News’, ‘2006-09-05’, ‘Gżegżółka’, ‘www.wp.pl’)):[/quote]
Może wiecie w czym jest problem ?
(Mysql::Error: #22001Data too long for column ‘content’ at row 1:
INSERT INTO news (title, date, content, link)
VALUES(‘Pierwszy News’, ‘2006-09-05’, ‘Gżegżółka’, ‘www.wp.pl’)):[/quote]
Może wiecie w czym jest problem ?[/quote]
Jaką używasz wersję bazy i jaką masz definicję pola w tabeli? Tak bez żadnych konkretów, to można tylko zgadywać. Strzelam: zmień z varchar na text.
[quote]title - varchar
date - datetime
content - text
link - varchar[/quote]
i tak jak napisalem wczesniej - wpis do bazy jest dokonywany pomyslnie jak nie uzywam polskich “ogonkow” w tekscie
jak tylko wpisze tekst z “ogonkami” to mi wywala blad j/w.
Nie wiem jakim cudem, ale po zrobieniu ‘gem uninstall mysql’, wszystko zaczęło działać. Mimo, że irb po wpisaniu “require ‘mysql’” krzyczy że nic nie ma, to ror działa i łączy się z bazą. Widocznie był jakiś problem z binarnym modułem mysql.
[quote]title - varchar
date - datetime
content - text
link - varchar[/quote]
i tak jak napisalem wczesniej - wpis do bazy jest dokonywany pomyslnie jak nie uzywam polskich “ogonkow” w tekscie
jak tylko wpisze tekst z “ogonkami” to mi wywala blad j/w.[/quote]
Dziwne, generalnie do polskich znaków MySQL powinien pracować w trybie utf-8, a nie latin2. Jeśli klient używa latin2, to wystarczy że przed operacją zapisu/odczytu do/z bazy odpalisz “SET NAMES latin2”. Wtedy baza rozumie, że wstawiasz latin2 i sama sobie wstawi do wewnetrznego formatu utf-8. UTF-8 ma także dodatkową przewagę: możesz uzywac collations (utf8_polish_ci), co pozwala na stosowanie polskich reguł przy sortowaniu i wyszukiwaniu (duże i małe polskie znaki będą traktowane tak samo).
Jesli dobrze Cie rozumiem chodzi Ci o to jak uzyc w ROR bazy w latin2. Robisz to ustawiajac kodowanie w config/database.yml Gem zrobi wszystko z Ciebie.
development:
adapter: mysql
encoding: utf8 <-- zamien na latin2
database: database
username: username
password: password
host: localhost
def set_charset @headers[“Content-Type”] = “text/html; charset=ISO-8859-2”
end
def configure_charsets @response.headers[“Content-Type”] = “text/html; charset=ISO-8859-2”
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute ‘SET NAMES latin2’
end
end
end[/quote]
No i wszystko dziala co bylo tematem tego watka. Baze ustawilem na UTF-8 tak jak bylo zalecane, w naglowkach stron rhtml ustawilem no i oczywiscie w samym kontrolerze aplikacji @headers[“Content-Type”] = “text/html; charset=ISO-8859-2”, no i na koniec jest to o czym pisal jzabiello:
czyli:
[color=#0000ff]
def configure_charsets @response.headers[“Content-Type”] = “text/html; charset=ISO-8859-2”
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute ‘SET NAMES latin2’
end
end
[/color]
[quote=tusla]def configure_charsets @response.headers[“Content-Type”] = “text/html; charset=ISO-8859-2”
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute ‘SET NAMES latin2’
end
end
end[/quote]
Zobacz to, co napisał Marcin. Chyba wystarczy w database.yml ustawić encoding: latin2. Odpalanie przed każdą kwerendą SET NAMES latin2 wtedy nie byłoby potrzebne. Nie sprawdzałem implementacji mysql w Ruby, ale w Pythonie jest możliwe aby to ustawić w momencie połączenia z bazą.