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