Question

Le code suivant indique une erreur de segmentation sur la dernière ligne

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

C'est certainement la dernière ligne à l'origine du problème: une instruction print sur la ligne suivante n'est jamais exécutée.

Quelqu'un sait-il pourquoi une tentative aussi simple échouerait?

J'utilise ceci sous Windows, au cas où cela ferait une différence.

Était-ce utile?

La solution

Cela peut être un nombre quelconque de choses, de la version de DBI à la gem Mysql, de la version de mysql à la version de ruby.

Malheureusement, ruby ??n’est pas un citoyen de première classe sous Windows, pas plus que toutes les configurations n’ont été testées.

Activez tout d’abord le débogage sur votre machine virtuelle pour reproduire ce problème avec davantage d’informations sur l’emplacement et la raison du segfault. Passez l'option -d à la machine virtuelle. J'espère que vous aurez ensuite plus d'informations sur l'endroit où chercher la solution.

Je vous suggère de vérifier le niveau de correctif de votre machine virtuelle

.
ruby --version

Je vérifierais également le niveau de DBI et Mysql

  # if you are using gems
  gem list --local 

Vous pouvez également changer le mode d’accès à Mysql, ActiveRecord utilise son propre code pour se connecter à mysql, qui est testé de manière plus approfondie. Peut ne pas être la meilleure solution mais ne doit pas l'exclure.

Autres conseils

Je ne sais pas pourquoi vous obtenez une erreur de segmentation dans ce code.

Il est possible, par exemple, que si vous dépassez les limites du tableau, vous ne puissiez pas réellement commettre d'erreur de segmentation tant que vous n'avez pas essayé d'exécuter le code ou d'accéder à la mémoire que vous avez écrasée. Vous pouvez donc disposer d’un système fonctionnant plusieurs jours avant les erreurs de segmentation s’il écrit uniquement en mémoire le processus en question dans une zone à laquelle il n’a pas souvent accès.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top