In plaats van MySQL-edelsteen te downgraden, is het mogelijk om de parameter databasenaam te repareren om de "bad handshake"
te herstellen probleem.
Ik vond dit:https://github.com/rubygems/rubygems/issues/423 Het werkt goed.
In plaats van een hack uit te voeren in real_connect
het is mogelijk om de "\0"
. toe te voegen in config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
EDIT
Als je de oplossing gebruikt met \0
aan het einde van de databasenaam. Je zult hier waarschijnlijk achter komen en het zelf oplossen, maar ik vermeld het toch:
(althans in mijn versie van Rails )
De databasestring gebruiken met \0
aan het einde geeft een probleem bij het doen van rake test
. Het begint met het verwijderen van de testdatabase voordat de ontwikkelingsdatabasedefinities worden gekopieerd en vervolgens wordt een SQL-opdrachtreeks gebruikt die de naam van de testdatabase bevat. Dit veroorzaakt een fout vanwege de \0
in het midden van de string.
In mijn geval gebruik ik een lokale ontwikkelingsdatabase die geen enkel probleem geeft, dus ik hoef geen \0
te hebben in die naam.
Hier is een alternatieve hack om dat op te lossen (originele code 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