1

以下代码在最后一行给出了分段错误

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 上运行它,以防万一。

4

2 回答 2

1

这可以是任意数量的东西,从 DBI 版本、Mysql gem、mysql 版本和 ruby​​ 版本。

不幸的是,ruby 不是 Windows 上的一等公民,也不是所有配置都在它上面进行了广泛的测试。

首先在您的 VM 上启用调试以重现此问题,并提供有关发生段错误的位置和原因的更多信息。将 -d 选项传递给 VM。希望从那里您可以获得更多信息来寻找解决方案。

我建议,检查你的虚拟机的补丁级别

ruby --version

我还要检查 DBI 和 Mysql 的级别

  # if you are using gems
  gem list --local 

您还可以切换访问 Mysql 的方式,ActiveRecord 使用它自己的代码连接到经过更广泛测试的 mysql。可能不是最好的解决方案,但不应排除它。

于 2009-01-12T17:08:37.497 回答
0

我不知道你为什么在这段代码中遇到段错误。

例如,如果您超出了数组的边界,那么在您尝试运行代码或访问您覆盖的内存之前,您实际上可能不会出现段错误。因此,如果它只在内存中写入进程在它不经常访问的区域中拥有的区域,那么您可以拥有一个运行数天的系统,然后再出现段错误。

于 2009-01-12T16:54:01.177 回答