Вместо да понижавате MySQL gem, е възможно да коригирате параметъра на името на базата данни, за да коригирате "bad handshake"
проблем.
Намерих това:https://github.com/rubygems/rubygems/issues/423 Работи добре.
Вместо да правите хак в real_connect
възможно е да добавите "\0"
в config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
РЕДАКТИРАНЕ
Ако използвате решението с \0
в края на името на базата данни. Вероятно ще разберете това и ще го решите сами, но все пак го споменавам:
(поне в моята версия на Rails )
Използване на низа на базата данни с \0
в края дава проблем при извършване на rake test
. Започва с изтриване на тестовата база данни преди копиране на дефинициите на базата данни за разработка и след това с използване на SQL команден низ, който включва името на тестовата база данни. Това ще доведе до грешка заради \0
в средата на низа.
В моя случай използвам локална база данни за разработка, която не създава никакъв проблем, така че не е необходимо да имам \0
на това име.
Ето алтернативен хак за решаване на това (оригинален код в mysql_adapter.rb
):
module ActiveRecord
module ConnectionAdapters
class MysqlAdapter
alias_method :old_execute, :execute
def execute(sql, name = nil) #:nodoc:
# This is needed because database names can end with "\0" to fix
# the issue with "handshake" when mysql server is newer than the gem
# requires. E.g. called when loading the new test db when doing "rake test".
sql = sql.delete("\0")
old_execute(sql, name)
end
end
end
end