Istället för att nedgradera MySQL gem, är det möjligt att fixa databasnamnparametern för att fixa "bad handshake"
problem.
Jag hittade detta:https://github.com/rubygems/rubygems/issues/423 Det fungerar bra.
Istället för att göra ett hack i real_connect
det är möjligt att lägga till "\0"
i config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
EDIT
Om du använder lösningen med \0
i slutet av databasnamnet. Du kommer förmodligen att ta reda på det här och lösa det själv, men jag nämner det ändå:
(åtminstone i min version av Rails )
Använda databassträngen med \0
i slutet ger problem när man gör rake test
. Det börjar med att ta bort testdatabasen innan du kopierar utvecklingsdatabasens definitioner och sedan använder en SQL-kommandosträng som innehåller testdatabasens namn. Detta kommer att orsaka ett fel på grund av \0
i mitten av strängen.
I mitt fall använder jag en lokal utvecklingsdatabas som inte ger några problem så jag behöver inte ha \0
i det namnet.
Här är ett alternativt hack för att lösa det (originalkoden i 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