Thay vì hạ cấp MySQL gem, bạn có thể sửa tham số tên cơ sở dữ liệu để sửa lỗi "bad handshake"
vấn đề.
Tôi đã tìm thấy thông tin này: https://github.com/rubygems/rubygems/issues/423 Nó hoạt động tốt.
Thay vì thực hiện hack trong real_connect
có thể thêm "\0"
trong config/database.yml
production:
database: "itsalive_production\0"
adapter: mysql
host: localhost
encoding: UTF8
...
CHỈNH SỬA
Nếu bạn sử dụng giải pháp với \0
ở cuối tên cơ sở dữ liệu. Bạn có thể sẽ tìm ra điều này và tự giải quyết nó, nhưng tôi vẫn đề cập đến nó:
( ít nhất là trong phiên bản Rails của tôi )
Sử dụng chuỗi cơ sở dữ liệu với \0
ở phần cuối đưa ra sự cố khi thực hiện rake test
. Nó bắt đầu bằng việc xóa cơ sở dữ liệu thử nghiệm trước khi sao chép các định nghĩa cơ sở dữ liệu phát triển, sau đó sử dụng chuỗi lệnh SQL bao gồm tên cơ sở dữ liệu thử nghiệm. Điều này sẽ gây ra lỗi vì \0
ở giữa chuỗi.
Trong trường hợp của tôi, tôi đang sử dụng cơ sở dữ liệu phát triển cục bộ không gặp vấn đề gì nên tôi không cần phải có \0
bằng tên đó.
Đây là một phương pháp hack thay thế để giải quyết vấn đề đó (mã gốc trong 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