2013-08-29 1 views
0

У нас есть небольшой скрипт, который соединяется с экземпляром Oracle. Этот скрипт отлично работает, когда он запускается за пределами нашего рабочего. Он даже отлично работает под консолью. Однако, когда мы загружаем тот же сценарий в виде Resque работника он бросаетПочему ruby-oci8 поднять «не удалось разрешить идентификатор соединения» в рабочем процессе resque, но не в консоли?

TNS:could not resolve the connect identifier specified 

Мы пробовали много вещей, но ничего не работает до сих пор.

Работник resque вызывает тот же класс, который работает в корневой среде и консоли.

ответ

0

По-видимому, рабочий-просвет не мог видеть $ TNS_ADMIN, поэтому я вручную установил ENV ['TNS_ADMIN'] в application.rb

0

Ну, я ничего не знаю о Ruby, так что я не совсем понимаю окружающую среду, о которой вы сейчас беспокоитесь, однако я знаю Oracle.

Я могу вам сказать, что «TNS: не удалось разрешить идентификатор подключения, указанный» означает, что Oracle не может разрешить идентификатор подключения, иначе строка подключения, учитывая окружающую среду, которая была создана

Так. некоторые вещи, о которых нужно подумать:

В среде выполнения рабочего процесса resque (извините, не знаю, что это такое), вам нужно, чтобы переменная окружения ORACLE_HOME была установлена ​​соответствующим образом. Oracle будет искать tnsnames.ora, sqlnet.ora, ldap .ora и т. д. в $ ORACLE_HOME/network/admin, если TNS_ADMIN не установлен. Если TNS_ADMIN установлен, он переопределит местоположение $ ORACLE_HOME/сеть/admin.

Опять же, я не знаком с Ruby или тем, что есть «работник resque», поэтому все, что я могу сказать, сравнивает две среды и видит, где они настроены по-разному.

Надеюсь, что помогает.

Если кто-то знает как Oracle, так и Ruby, возможно, они могут предложить более конкретные советы.

Опять же, надеюсь, что это поможет.