MySQL gemをダウングレードする代わりに、データベース名パラメーターを修正して、"bad handshake"
を修正することができます。 問題。
私はこれを見つけました: https://github.com/rubygems/rubygems/issues/423 うまく機能しています。
real_connect
でハックする代わりに "\0"
を追加することができます config/database.yml
内
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
編集\0
でソリューションを使用する場合 データベース名の最後にあります。あなたはおそらくこれを見つけて自分で解決するでしょうが、とにかくそれについて言及します:
(少なくとも私のバージョンのRailsでは )
\0
でデータベース文字列を使用する 最後に、rake test
を実行するときに問題が発生します 。まず、開発データベース定義をコピーする前にテストデータベースを削除し、次にテストデータベース名を含むSQLコマンド文字列を使用します。これにより、エラーが発生します \0
のため 文字列の真ん中に。
私の場合、問題のないローカル開発データベースを使用しているので、\0
は必要ありません。 その名前で。
これを解決するための代替ハックがあります(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