sql >> Base de Datos >  >> RDS >> Mysql

Ruby on Rails MySQL #08S01Apretón de manos incorrecto:¿degradar MySQL?

En lugar de degradar la gema de MySQL, es posible corregir el parámetro del nombre de la base de datos para corregir el "bad handshake" problema.

Encontré esto:https://github.com/rubygems/rubygems/issues/423 Está funcionando bien.

En lugar de hacer un truco en real_connect es posible agregar el "\0" en config/database.yml

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

EDITAR
Si usa la solución con \0 al final del nombre de la base de datos. Probablemente descubrirá esto y lo resolverá usted mismo, pero lo menciono de todos modos:
(al menos en mi versión de Rails )
Usando la cadena de la base de datos con \0 al final da problema al hacer rake test . Comienza con la eliminación de la base de datos de prueba antes de copiar las definiciones de la base de datos de desarrollo y luego usa una cadena de comando SQL que incluye el nombre de la base de datos de prueba. Esto provocará un error debido al \0 en medio de la cuerda.

En mi caso estoy usando una base de datos de desarrollo local que no da ningún problema por lo que no necesito tener \0 en ese nombre.
Aquí hay un truco alternativo para resolver eso (código original en 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