MySQL रत्न को डाउनग्रेड करने के बजाय, "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
के साथ करते हैं डेटाबेस नाम के अंत में। आप शायद इसका पता लगा लेंगे और इसे स्वयं हल कर लेंगे, लेकिन मैं वैसे भी इसका उल्लेख करता हूं:
(कम से कम रेल के मेरे संस्करण में )
डेटाबेस स्ट्रिंग का उपयोग \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