Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ruby on Rails MySQL #08S01Mauvaise poignée de main - rétrograder MySQL ?

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