Domanda

Il codice seguente fornisce un errore di segmentazione sull'ultima riga

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

È sicuramente l'ultima riga a causare il problema: un'istruzione di stampa nella riga successiva non viene mai eseguita.

Qualcuno sa perché un tentativo così semplice fallirebbe?

Lo sto eseguendo su Windows, nel caso ciò faccia la differenza.

È stato utile?

Soluzione

Potrebbe trattarsi di un numero qualsiasi di cose, dalla versione di DBI, gemma Mysql, versione mysql e versione ruby.

Sfortunatamente ruby ??non è un cittadino di prima classe su Windows, né tutte le configurazioni sono ampiamente testate su di esso.

Innanzitutto abilita il debug sulla VM per riprodurre questo problema con ulteriori informazioni su dove e perché si sta verificando il segfault. Passa l'opzione -d alla VM. Da lì si spera che tu abbia maggiori informazioni su dove cercare la soluzione.

Suggerirei, controlla il livello di patch della tua VM

ruby --version

Verificherei anche il livello di DBI e Mysql

  # if you are using gems
  gem list --local 

Potresti anche cambiare il modo in cui accedi a Mysql, ActiveRecord utilizza il proprio codice per connettersi a mysql, che è stato ampiamente testato. Potrebbe non essere la soluzione migliore, ma non dovrebbe escluderlo.

Altri suggerimenti

Non so perché stai ottenendo un segfault in questo codice.

È possibile che, ad esempio, se si superano i limiti dell'array, non si può effettivamente segfault finché non si tenta di eseguire il codice o accedere alla memoria sovrascritta. Quindi potresti avere un sistema che funziona per giorni prima che segfault se solo scrivesse in memoria il processo possiede in un'area a cui non accedeva spesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top