Member 14892170 Ответов: 1

'ORA-06413: соединение не открыто' только на сервере rails


Я довольно новичок в rails. У меня проблема с Оракулом. Я всегда получаю ошибку ORA-06413: Connection not open от oracle, когда я запускаю сервер rails

Я использую эту конфигурацию

Рубин '2.6.3'
драгоценный камень 'рельсы', '~> 5.2.3'
драгоценный камень 'pg', '= 0.18.1'
драгоценный камень 'ruby-oci8', '~> 2.2.4'
драгоценный камень 'activerecord-oracle_enhanced-adapter','~> 5.2.3'
...
Моя база данных.yml-это

oracle_db:
адаптер: oracle_enhanced
база данных: //192.168.0.2:1521/производство
имя пользователя: username
пароль: пароль

развитие:
пул: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
адаптер: postgresql
кодировка: unicode
имя пользователя: username
пароль: пароль
ведущий: 192.168.0.3
база данных: my_db

Я написал этот класс для извлечения кода последнего человека, вставленного в oracle DB

класс Oracle < ActiveRecord::Base
establish_connection :oracle_db
область применения :открыть, -&ГТ; { где(поле: 'ФК').заказа(created_at: :по убыванию) }

деф селф.GetLastPersonCode
myquery = "SELECT CODE FROM table WHERE ROWNUM = 1 ORDER BY CODE DESC"
результат = self.connection.select_one(myquery)
если результат["код"].nil?
код = "NEW200000"
еще
записи = результат["код"].to_s.прокладка
код = "новый"+(запись[3..].to_i+1).to_s
конец
код возврата
конец
конец

Когда я вставляю нового человека в свою базу данных PG, я хочу найти последний код в oracle_db и создать новый. Я использую этот код

@человек = человек.новый(person_params_post)
@человек.код = Оракул.GetLastPersonCode
@человек.сохранить

Теперь все работает нормально, но когда я пытаюсь восстановить код, я получаю ошибку "ORA-06413: соединение не открыто". Дело в том, что я не объясняю, что... если из консоли rails я запускаю Oracle.GetLastPersonCode я правильно восстанавливаю код человека. Я использую код visual studio на Debian Buster.


Что изменилось между серверной и консольной средой?

Что я уже пробовал:

Rails console
Loading development environment (Rails 5.2.4.1)
2.6.3 :001 > Oracle.GetLastPersonCode
   (1163.3ms)  SELECT ....WHERE ROWNUM = 1
 => "CFC192957"

1 Ответов

Рейтинг:
0

Sandeep Mewara

Во-первых, с ошибкой, которую вы получаете, это не связано с Rails здесь. Это простая ошибка, связанная с Oracle, которая указывает на то, что что-то не так с подключением к базе данных.

Теперь, учитывая код ошибки, кажется, что горстка информации в интернете/Google для него:
Ссылаться: Как устранить ошибки Oracle - Устранение неполадок[^]

Цитата:
Если вы запускаете конвертер на 64-битной Windows, то наиболее вероятной причиной ошибки является то, что исполняемый модуль был помещен в папку "C:\Program Files (x86)\...", в то время как Oracle не разрешает символы кавычек в клиентском приложении. Чтобы исправить ошибку, скопируйте все содержимое папки установки продукта в другое место, которое не содержит кавычек в пути.

Аналогичный запрос ответил Здесь на CodeProject с несколькими другими вариациями, вы можете попробовать, если выше не работает: ORA-06413: соединение не открыто[^]