Zamiast obniżać wersję gem MySQL, możliwe jest poprawienie parametru nazwy bazy danych, aby naprawić "bad handshake"
problem.
Znalazłem to:https://github.com/rubygems/rubygems/issues/423 Działa dobrze.
Zamiast hackowania w real_connect
można dodać "\0"
w config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
EDYTUJ
Jeśli używasz rozwiązania z \0
na końcu nazwy bazy danych. Prawdopodobnie sam się tego dowiesz i rozwiążesz, ale mimo to wspominam o tym:
(przynajmniej w mojej wersji Railsów )
Korzystanie z ciągu bazy danych z \0
na koniec daje problem podczas wykonywania rake test
. Rozpoczyna się od usunięcia testowej bazy danych przed skopiowaniem definicji programistycznych baz danych, a następnie przy użyciu ciągu poleceń SQL, który zawiera nazwę testowej bazy danych. Spowoduje to błąd z powodu \0
w środku ciągu.
W moim przypadku używam lokalnej bazy danych deweloperskiej, która nie sprawia żadnego problemu, więc nie muszę mieć \0
w tej nazwie.
Oto alternatywny sposób na rozwiązanie tego problemu (oryginalny kod w 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