Проблемы с Oracle в Rails с граблями, а не с сайтом - PullRequest
1 голос
/ 22 октября 2009

Я работаю над сайтом Rails, который подключается к базе данных Oracle, и хотя я не создавал сайт с нуля, я занимаюсь техническим обслуживанием. Сайт использует плагин delayed_jobs для обработки некоторых фоновых задач, и я хотел бы иметь возможность запускать rake jobs:work на сервере разработки для периодической обработки всех заданий в очереди (из-за конфигурации сервера, запуска демонизированная версия скрипта на сервере разработки не подходит). Однако всякий раз, когда я пытаюсь выполнить команду, я получаю следующую классическую ошибку Oracle:

error while trying to retrieve text for error ora-12154

Обычно я думаю, что это будет проблема аутентификации (например, неверные учетные данные в database.yml), но сайт работает и работает нормально (и выполняет много работы с базой данных). Я попытался добавить RAILS_ENV=production в качестве параметра к rake, чтобы заставить его работать в производственной среде, но получил ту же ошибку (есть две отдельные установки rails для рабочей и рабочей версий сайта, и я установил идентификаторы "development" и "production" в файле конфигурации db для разработки).

Я не уверен, что может быть причиной этой ошибки, и у меня нет большого опыта использования Oracle с рельсами. Есть предложения?

Большое спасибо!

Justin

РЕДАКТИРОВАТЬ (26.10.09): Все еще не могу понять, что является причиной проблемы здесь. Приложение продолжает работать (и общаться с базой данных) без проблем, но rake продолжает выдавать ошибки БД. То же самое делает скрипт / консоль, который показывает приглашение, но сначала жалуется с тем же сообщением об ошибке Oracle. Я буду продолжать искать, но у меня заканчиваются идеи ...

РЕДАКТИРОВАТЬ (26.10.09, позже): следуя совету этой ссылки , я установил ORACLE_HOME и TNS_ADMIN, чтобы они указывали на каталог, в котором находится tnsnames.ora. Простая установка ORACLE_HOME не имела очевидного эффекта, но теперь, когда TNS_ADMIN указывает на правильное место, я начинаю получать ошибки сегментации всякий раз, когда пытаюсь открыть консоль или запустить rake:

/usr/local/lib/ruby/site_ruby/1.8/oci8.rb:184: [BUG] Segmentation Fault

и безоговорочно загрузитесь обратно в подсказку. Есть еще идеи?

Ответы [ 4 ]

1 голос
/ 26 октября 2009

Наконец-то понял ... оказывается, что ORACLE_HOME не был правильно установлен как переменная окружения для моей учетной записи пользователя. Теперь грабли, скрипт / консоль и т. Д. Радостно гудят.

0 голосов
/ 23 октября 2009

IN sql server Я бы, вероятно, запустил profuiler, чтобы посмотреть, что на самом деле отправляется, вместо того, что, я думаю, я настроил. Я уверен, что Oracle также имеет некоторую утилиту для профилирования. Я бы попробовал это и увидел, что вы можете обнаружить, что он не использует учетные данные, которые вы считаете.

0 голосов
/ 23 октября 2009

Ну, как упоминал Майк, ora-12145 означает, что TNS не может разрешить идентификатор базы данных (TNS - это сопоставление имени с базой данных Oracle, что-то вроде DNS). Если вы можете найти файл tnsnames.ora, вы можете посмотреть, какие базы данных там настроены, и сравнить его с файлом database.yml. Тот факт, что он работает как отложенное задание, но не из командной строки, немного странно, и заставляет меня думать, что, возможно, в одном контексте задаются переменные окружения, которых нет в другом.

Если ни один из этих вариантов не подходит, существует длинный список предложений по устранению неполадок в http://ora -12154.ora-code.com , которые относятся к этому коду ошибки. 1008 *

0 голосов
/ 22 октября 2009

Ошибка оракула говорит следующее:

ORA-12154 генерируется сетевым уровнем оракула. Сообщение об ошибке TNS выбрасывается во время процесса входа в базу данных. Эта ошибка указывает на то, что коммуникационное программное обеспечение в Oracle (SQL * Net или Net8) не распознало имя хоста / службы, указанное в параметрах соединения. Эта ошибка почти всегда указывает на неправильную конфигурацию записей oracle tns.

Можете ли вы подключиться к своему экземпляру oracle, используя sqlplus или другой инструмент db?

Странно, что приложение работает нормально.

Есть ли где-нибудь где-то $ ORACLE_SID, который может указывать на БД, которой не существует?

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