Sonderbare Rubin Segmentation Fault mit DBI und MySQL
-
22-07-2019 - |
Frage
Der folgende Code einen Segmentation Fault in der letzten Zeile gibt
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
Es ist definitiv die letzte Zeile, die das Problem verursacht -. Eine print-Anweisung in der nächsten Zeile jemals ausgeführt nicht bekommen
Weiß jemand, warum ein so einfacher Versuch fehlschlagen würde?
Ich laufe dies auf Windows, falls die einen Unterschied macht.
Lösung
Dies könnte eine beliebige Anzahl von Dingen, von der Version von DBI, Mysql Juwel, MySQL-Version und Ruby-Version.
Leider Rubin ist kein First-Class-Objekt an Fenstern, noch sind alle Konfigurationen ausführlich darauf getestet.
Erste Debuggen auf Ihrer VM ermöglichen, dieses Problem zu reproduzieren, mit mehr Informationen darüber, wo und warum die segfault geschieht. Übergeben Sie die Option -d die VM. hoffentlich Von dort werden Sie mehr Informationen haben, wo die Lösung zu suchen.
Ich würde vorschlagen, überprüfen Sie die Patch-Ebene Ihrer VM
ruby --version
Ich würde auch das Niveau der DBI überprüfen und Mysql
# if you are using gems
gem list --local
Sie können auch wechseln, wie Sie Mysql zugreifen, Active verwendet es eigenen Code ist zu MySQL zu verbinden, was ausgiebiger getestet wird. Vielleicht nicht die beste Lösung sein, aber es sollte nicht ausschließen.
Andere Tipps
Ich weiß nicht, warum Sie einen segfault in diesem Code sind immer.
Es ist möglich, dass, zum Beispiel, wenn Sie die Grenzen des Arrays überrannt, können Sie nicht wirklich segfault bis Sie versuchen, den Code auszuführen oder auf den Speicher zugreifen, die Sie überschrieben. So Sie ein System haben könnte, die für Tage läuft, bevor es Segfaults wenn es nur im Speicher schrieb der Prozess in einem Bereich besitzt es häufig den Zugang Ball hielt.