Ruby C расширение возвращает report_on_exception true - PullRequest
1 голос
/ 29 января 2020

Я пытался импортировать api server_info в расширение ibm_db. Он хорошо работал в 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 но горе = rks хорошо в windows.

Когда я запускаю код в режиме отладки, он не выдает никаких ошибок, только в обычном режиме он выдает ошибку.

Спасибо, Ахиль

1 Ответ

0 голосов
/ 04 февраля 2020

Ну, два подхода

  1. использовать сон в течение 5-10 секунд после соединения с БД
  2. проверить соединение с БД, например: p "подключено", если ActiveRecord :: Base.connected?

В вашем случае необходимо проверить в геме ibm_db, как проверить, установлено ли соединение или нет

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

, если он говорит "ИСТИНА" go впереди, иначе пауза / сон, что угодно ваше требование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...