Au lieu de rétrograder la gemme MySQL, il est possible de corriger le paramètre de nom de la base de données pour corriger le "bad handshake"
problème.
J'ai trouvé ceci :https://github.com/rubygems/rubygems/issues/423 Ça marche bien.
Au lieu de faire un hack dans real_connect
il est possible d'ajouter le "\0"
dans config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
EDIT
Si vous utilisez la solution avec \0
à la fin du nom de la base de données. Vous le découvrirez probablement et le résoudrez vous-même, mais je le mentionne quand même :
(au moins dans ma version de Rails )
Utilisation de la chaîne de base de données avec \0
à la fin pose un problème lors du rake test
. Il commence par supprimer la base de données de test avant de copier les définitions de la base de données de développement, puis utilise une chaîne de commande SQL qui inclut le nom de la base de données de test. Cela provoquera une erreur à cause du \0
au milieu de la ficelle.
Dans mon cas, j'utilise une base de données de développement locale qui ne pose aucun problème, donc je n'ai pas besoin d'avoir \0
dans ce nom.
Voici un hack alternatif pour résoudre ce problème (code original dans 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