Странная ошибка сегментации рубина с DBI и MySQL - PullRequest
1 голос
/ 12 января 2009

Следующий код дает ошибку сегментации в последней строке

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

Это определенно последняя строка, которая вызывает проблему - оператор print на следующей строке никогда не выполняется.

Кто-нибудь знает, почему такая простая попытка не удалась?

Я запускаю это на Windows, на случай, если что-то изменится.

Ответы [ 2 ]

1 голос
/ 12 января 2009

Это может быть любое количество вещей, от версии DBI, Mysql gem, mysql версии и ruby ​​версии.

К сожалению, ruby ​​не является первоклассным пользователем Windows, и не все конфигурации тщательно проверены на нем.

Сначала включите отладку на вашей виртуальной машине, чтобы воспроизвести эту проблему с более подробной информацией о том, где и почему происходит ошибка. Передайте опцию -d ВМ. Оттуда у вас будет больше информации о том, где искать решение.

Я бы посоветовал проверить уровень патча вашей виртуальной машины

ruby --version

Я бы тоже проверил уровень DBI, а Mysql

  # if you are using gems
  gem list --local 

Вы также можете изменить способ доступа к Mysql. ActiveRecord использует собственный код для подключения к mysql, который более тщательно протестирован. Может быть не лучшим решением, но не должно исключать его.

0 голосов
/ 12 января 2009

Я не знаю, почему вы получаете ошибку в этом коде.

Возможно, что, например, если вы выйдете за границы массива, вы не сможете на самом деле segfault, пока не попытаетесь запустить код или получить доступ к памяти, которую вы перезаписали. Таким образом, у вас может быть система, которая будет работать в течение нескольких дней, прежде чем произойдет ее сбой, если она только записывает в память, которой принадлежит процесс, в область, к которой он часто не обращался.

...