sql >> Databasteknik >  >> RDS >> Mysql

Ruby on Rails MySQL #08S01Dåligt handslag - nedgradera MySQL?

Istället för att nedgradera MySQL gem, är det möjligt att fixa databasnamnparametern för att fixa "bad handshake" problem.

Jag hittade detta:https://github.com/rubygems/rubygems/issues/423 Det fungerar bra.

Istället för att göra ett hack i real_connect det är möjligt att lägga till "\0" i config/database.yml

production:
  database: "itsalive_production\0"
  adapter: mysql
  host: localhost
  encoding: UTF8
  ...

EDIT
Om du använder lösningen med \0 i slutet av databasnamnet. Du kommer förmodligen att ta reda på det här och lösa det själv, men jag nämner det ändå:
(åtminstone i min version av Rails )
Använda databassträngen med \0 i slutet ger problem när man gör rake test . Det börjar med att ta bort testdatabasen innan du kopierar utvecklingsdatabasens definitioner och sedan använder en SQL-kommandosträng som innehåller testdatabasens namn. Detta kommer att orsaka ett fel på grund av \0 i mitten av strängen.

I mitt fall använder jag en lokal utvecklingsdatabas som inte ger några problem så jag behöver inte ha \0 i det namnet.
Här är ett alternativt hack för att lösa det (originalkoden i 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


  1. Kan jag kopiera en rad i MySQL för att infoga i samma tabell?

  2. nodeJS returnerar värde från callback

  3. SQL VARCHAR Datatyp Göra och inte göra för snabbare databaser

  4. Hur man ökar maximala anslutningar i PostgreSQL