Namísto downgradu MySQL klenotu je možné opravit parametr názvu databáze a opravit "bad handshake"
problém.
Našel jsem toto:https://github.com/rubygems/rubygems/issues/423 Funguje to dobře.
Místo hackování v real_connect
je možné přidat "\0"
v config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
UPRAVIT
Pokud používáte řešení s \0
na konci názvu databáze. Pravděpodobně to zjistíte a vyřešíte sami, ale přesto to zmiňuji:
(alespoň v mé verzi Rails )
Použití databázového řetězce s \0
na konci dává problém při provádění rake test
. Začíná odstraněním testovací databáze před zkopírováním definic vývojové databáze a poté použitím řetězce příkazu SQL, který obsahuje název testovací databáze. To způsobí chybu kvůli \0
uprostřed řetězce.
V mém případě používám místní vývojovou databázi, která nezpůsobuje žádný problém, takže nepotřebuji mít \0
v tomto jméně.
Zde je alternativní hack, který to vyřeší (původní kód v 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