Pregunta

El siguiente código da un error de segmentación en la última línea

require 'rubygems'
gem 'mysql'
gem 'dbi'
require 'dbi'
require 'mysql'

dsn = "DBI:Mysql:DATABASE:www.HOST.net" # redacted
dbh = DBI.connect(dsn, "USERNAME", "PASSWORD") # redacted

sth = dbh.execute("select  * from TABLE where numeric_value is not null limit 10;") # redacted

Definitivamente es la última línea la que está causando el problema: una declaración de impresión en la siguiente línea nunca se ejecuta.

¿Alguien sabe por qué un intento tan simple podría fallar?

Estoy ejecutando esto en Windows, en caso de que eso marque la diferencia.

¿Fue útil?

Solución

Esto podría ser cualquier cantidad de cosas, desde la versión de DBI, Mysql gem, mysql y ruby.

Desafortunadamente, ruby ??no es un ciudadano de primera clase en Windows, ni todas las configuraciones se prueban exhaustivamente en él.

Primero habilite la depuración en su VM para reproducir este problema con más información acerca de dónde y por qué está ocurriendo la falla predeterminada. Pase la opción -d la VM. A partir de ahí, tendrá más información sobre dónde buscar la solución.

Sugeriría, verifique el nivel de parche de su VM

ruby --version

También verificaría el nivel de DBI y Mysql

  # if you are using gems
  gem list --local 

También puede cambiar cómo está accediendo a Mysql, ActiveRecord usa su propio código para conectarse a mysql, que se prueba más exhaustivamente. Puede que no sea la mejor solución, pero no debería descartarla.

Otros consejos

No sé por qué está obteniendo una segfault en este código.

Es posible que, por ejemplo, si sobrepasa los límites de la matriz, en realidad no se desconecte hasta que intente ejecutar el código o acceder a la memoria que sobrescribió. Por lo tanto, podría tener un sistema que se ejecute durante días antes de que se produzca una falla si solo escribiera en la memoria que el proceso posee en un área a la que no tenía acceso con frecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top