【问题标题】:Ruby C extension returns report_on_exception is trueRuby C 扩展返回 report_on_exception 为 true
【发布时间】:2020-01-29 07:08:14
【问题描述】:

我试图在 ibm_db 扩展中导入 server_info api。它在 Windows 中运行良好,但在 Linux 中,它返回踏入睡眠错误。

#<Thread:0x000055c9febc5ca0 sleep> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
stack level too deep (SystemStackError)
^C*** stack smashing detected ***: <unknown> terminated

代码:-

require 'ibm_db'
conn = IBM_DB.connect('DATABASE=;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=;PWD=','','')
puts 'this is ibm_db'
#Thread.report_on_exception = false
puts 'this is begin'
puts IBM_DB
serverinfo = IBM_DB::server_info( conn )
puts serverinfo.DBMS_NAME[0,100]
puts IBM_DB.close(conn)

为什么相同的代码在 Linux 中返回错误,但在 Windows 中却很糟糕。

当我在调试模式下运行代码时,它不会产生任何错误,只有在正常模式下才会产生错误。

谢谢, 阿基尔

【问题讨论】:

  • 虽然我没有在我的机器上设置相同的代码。在我看来,在调试模式下,由于时间“数据库连接已建立”,您的代码工作正常,然后您继续下一步。在代码运行的情况下,在建立数据库连接之前,它会进行下一步并产生错误,因为连接未建立。它与windows/linux无关。与建立连接超时有关
  • @Chitreshgoyal 所以你说的是增加连接时间?
  • 好吧,我们可以尝试两件事。 1. 休眠 5-10 秒 2. 检查数据库连接,例如: p "connected" if ActiveRecord::Base.connected? --- 在您的情况下,需要检查 ibm_db gem 如何检查它是否已连接--- 如果您遇到同样的问题,我将在我的机器上进行相同的设置。
  • 嗨@Chitreshgoyal 感谢您的帮助!!!!添加睡眠 5 秒后它工作了我可以知道添加睡眠后它工作的原因以及我必须在 gem 中做哪些更改以便它可以在不添加睡眠功能的情况下工作。

标签: ruby ruby-c-extension


【解决方案1】:

嗯,两种方法

  1. 在连接数据库后使用睡眠 5-10 秒
  2. 检查数据库连接,如:p "connected" if ActiveRecord::Base.connected?

在你的情况下,需要检查 ibm_db gem 如何检查连接是否建立

conn=ibm_db.connect("DATABASE=database;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=username;PWD=password",'','')
connState = ibm_db.active(conn)
print(connState)

如果它说“真”,请继续,否则暂停/睡眠,无论您有什么要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 2022-10-17
    • 2019-02-08
    • 2017-02-24
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多