문제

다음 코드는 마지막 줄에 분할 오류를 제공합니다.

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

문제를 일으키는 마지막 줄입니다. 다음 줄의 인쇄 문은 실행되지 않습니다.

왜 그런 간단한 시도가 실패할지 아는 사람이 있습니까?

차이가있는 경우 Windows에서 이것을 실행하고 있습니다.

도움이 되었습니까?

해결책

DBI 버전, MySQL GEM, MySQL 버전 및 Ruby 버전에서는 여러 가지가 될 수 있습니다.

불행히도 Ruby는 Windows의 일류 시민이 아니며 모든 구성이 광범위하게 테스트되지 않습니다.

먼저 VM에서 디버깅을 활성화하여 Segfault가 어디에서 발생하는지에 대한 자세한 정보를 통해이 문제를 재현하십시오. -D 옵션을 VM으로 통과하십시오. 거기에서 솔루션을 찾을 위치에 대한 더 많은 정보가 있기를 바랍니다.

나는 당신의 VM의 패치 레벨을 확인할 것을 제안합니다.

ruby --version

또한 DBI의 레벨을 확인하고 MySQL

  # if you are using gems
  gem list --local 

MySQL에 액세스하는 방법을 전환 할 수 있으며 ActiveRecord는 자체 코드를 사용하여 MySQL에 연결하여보다 광범위하게 테스트됩니다. 최상의 솔루션은 아니지만 배제해서는 안됩니다.

다른 팁

이 코드에서 왜 Segfault를 받고 있는지 모르겠습니다.

예를 들어, 배열의 한계를 오버런하면 코드를 실행하거나 덮어 쓰는 메모리에 액세스하려고 할 때까지 실제로 segfault가 될 수 있습니다. 따라서 프로세스가 자주 액세스하지 않은 영역에서 소유 한 메모리에만 작성된 경우 며칠 전에 실행되는 시스템을 가질 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top