Alih-alih menurunkan versi permata MySQL, parameter nama database dapat diperbaiki untuk memperbaiki "bad handshake"
masalah.
Saya menemukan ini:https://github.com/rubygems/rubygems/issues/423 Ini bekerja dengan baik.
Alih-alih melakukan peretasan di real_connect
itu mungkin untuk menambahkan "\0"
di config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
EDIT
Jika Anda menggunakan solusi dengan \0
di akhir nama database. Anda mungkin akan menemukan ini dan menyelesaikannya sendiri, tetapi saya tetap menyebutkannya:
(setidaknya dalam versi Rails saya )
Menggunakan string database dengan \0
pada akhirnya memberikan masalah saat melakukan rake test
. Ini dimulai dengan menghapus database pengujian sebelum menyalin definisi database pengembangan, dan kemudian menggunakan string perintah SQL yang menyertakan nama database pengujian. Ini akan menyebabkan kesalahan karena \0
di tengah string.
Dalam kasus saya, saya menggunakan database pengembangan lokal yang tidak memberikan masalah jadi saya tidak perlu memiliki \0
dengan nama tersebut.
Berikut adalah alternatif hack untuk mengatasinya (kode asli di 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