Em vez de fazer o downgrade do MySQL gem, é possível corrigir o parâmetro do nome do banco de dados para corrigir o
"bad handshake"
problema. Encontrei isto:https://github.com/rubygems/rubygems/issues/423 Está funcionando bem.
Em vez de fazer um hack em
real_connect
é possível adicionar o "\0"
em config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
EDIT
Se você usar a solução com
\0
no final do nome do banco de dados. Você provavelmente descobrirá isso e resolverá sozinho, mas eu o mencionei de qualquer maneira:(pelo menos na minha versão do Rails )
Usando a string do banco de dados com
\0
no final dá problema ao fazer rake test
. Ele começa com a exclusão do banco de dados de teste antes de copiar as definições do banco de dados de desenvolvimento e, em seguida, usando uma cadeia de comando SQL que inclui o nome do banco de dados de teste. Isso causará um erro por causa do \0
no meio da corda. No meu caso estou usando um banco de dados de desenvolvimento local que não dá nenhum problema então não preciso ter
\0
nesse nome.Aqui está um hack alternativo para resolver isso (código original em
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