Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ruby on Rails MySQL #08S01Schlechter Handshake – Downgrade von MySQL?

Anstatt das MySQL-Gem herunterzustufen, ist es möglich, den Parameter des Datenbanknamens zu korrigieren, um den "bad handshake" zu beheben Problem.

Ich habe das gefunden:https://github.com/rubygems/rubygems/issues/423 Es funktioniert gut.

Anstatt einen Hack in real_connect durchzuführen Es ist möglich, den "\0" hinzuzufügen in config/database.yml

production:
  database: "itsalive_production\0"
  adapter: mysql
  host: localhost
  encoding: UTF8
  ...

BEARBEITEN
Wenn Sie die Lösung mit \0 verwenden am Ende des Datenbanknamens. Sie werden das wahrscheinlich selbst herausfinden und lösen, aber ich erwähne es trotzdem:
(zumindest in meiner Version von Rails )
Verwendung des Datenbank-Strings mit \0 am Ende gibt es Probleme beim rake test . Es beginnt mit dem Löschen der Testdatenbank, bevor die Entwicklungsdatenbankdefinitionen kopiert werden, und verwendet dann eine SQL-Befehlszeichenfolge, die den Namen der Testdatenbank enthält. Dies führt zu einem Fehler wegen \0 in der Mitte der Saite.

In meinem Fall verwende ich eine lokale Entwicklungsdatenbank, die keine Probleme bereitet, sodass ich \0 nicht benötige unter diesem Namen.
Hier ist ein alternativer Hack, um das zu lösen (Originalcode in 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