前提・実現したいこと
web開発初心者です。
インターネットが繋がっていないサーバーでrailsのアプリケーションを作成することになりました。
既存のoracleのDBに接続したいと思っています。
試しにoracleDBへ接続をしてみようと思い、何かしらのデータを取得しようとしたところ、エラーが発生してしまいました。
メインのDBとは別に、外部DBであるoracleのDBはestablish_connection
を用いて接続を試みています。
dockerにてrails環境を構築しています。
ruby 2.5.3
rails 5.2.4.3
お分かりになる方、お助けください。。
発生している問題・エラーメッセージ
既存のoracleデータベースの接続を試みたところ、rails console
ではActiveRecordを使って、データの取得ができます。
なぜかrails serverでの接続ができません。rails console
と rails server
ではデータベースへの接続の仕方が違うのでしょうか。
rails console
でデータの取得はできているため、database.ymlのタイポや、gemのインストールミスは無いように思えるのですが、、、
該当のソースコード
パスワード、テーブル名等は、適当に変更してあります。
oracleDB用にdatabase.ymlに設定を追加。
#database.yml oracle_development: adapter: oracle_enhanced encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS"){ 5 } %> username: username password: password database: ris oracle_production: adapter: oracle_enhanced encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS"){ 5 } %> username: username password: password database: ris
#tnsnames.ora ris = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xx.xxx.xxx.xxx)(PORT = xxxx)) (CONNECT_DATA = (SID = xxxx) ) )
データ取得用?のモデル作成。名前空間でテーブル名がバッティングしないようにしました。
#app/model/oracle.rb module Oracle class Base < ActiveRecord::Base establish_connection("oracle_#{Rails.env}.to_sym) self.abstract_class = true end end
モデルを作成。既存のDBのテーブル名がrailsの命名規則に反して単数形だったので、sels.table_name
でテーブル名を指定しました。
#app/model/oracle/exam.rb module Oracle class Exam < Oracle::Base self.table_name = 'dbname.tablename' end end
試しに、以下のようにindexアクションでデータの取得を試みたのですが、うまく行きません。
ちなみに、全く同じコードでrails console
の方では成功しています。
#app/controllers/exams_controller.rb class ExamsController < ApplicationController def index @exam = Oracle::Exam.select(:pid, :name).where(pid: "000000000", exdate: "20200805") end end
バージョン
ruby 2.5.3
rails 5.2.4.3
activerecord-oracle_enhanced-adapter 5.2.8
ruby-oci8 2.2.8
回答1件
あなたの回答
tips
プレビュー