簡體   English   中英

如何在 Rails 6 中使用第二個數據庫

[英]How do I use the second database in Rails 6

我有這個數據庫配置

default: &default
  adapter: oracle_enhanced
  username: dbuser
  password: secret

auxillary: &auxillary
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  migrations_paths: db/auxillary_migrate


development:
  primary:
    <<: *default
    database: DEVLIMS
  auxillary:
    <<: *auxillary
    database: db/development_auxillary.sqlite3

它適用於遷移,但我在控制台中收到此錯誤

2.6.3 :001 > User.last
Traceback (most recent call last):
        1: from (irb):1
ArgumentError (No database file specified. Missing argument: database)
2.6.3 :002 > 

這是我的 model

class User < ApplicationRecord
  connects_to database: { writing: :auxillary, reading: :auxillary}
end

我應該如何從輔助數據庫中讀取和寫入數據? 我需要輔助數據庫用於用戶認證、權限系統和其他不應該放在主數據庫中的東西。

有人建議的答案不起作用。 我的配置似乎有問題。

2.6.3 :002 > ActiveRecord::Base.establish_connection(:auxillary)
 => #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x000055acd5119540 @mon_mutex=#<Thread::Mutex:0x000055acd51194c8>, @mon_mutex_owner_object_id=47100398717600, @mon_owner=nil, @mon_count=0, @query_cache_enabled=#<Concurrent::Map:0x000055acd51194a0 entries=0 default_proc=#<Proc:0x000055acd51193b0@/home/jacekp/.rvm/gems/ruby-2.6.3@qc_charts_ror6/gems/activerecord-6.0.3/lib/active_record/connection_adapters/abstract/query_cache.rb:32>>, @spec=#<ActiveRecord::ConnectionAdapters::ConnectionSpecification:0x000055acd51197c0 @name="primary", @config={:adapter=>"sqlite3", :pool=>5, :timeout=>5000, :migrations_paths=>"db/auxillary_migrate"}, @adapter_method="sqlite3_connection">, @checkout_timeout=5, @idle_timeout=300.0, @size=5, @thread_cached_conns=#<Concurrent::Map:0x000055acd5119360 entries=0 default_proc=nil>, @connections=[], @automatic_reconnect=true, @now_connecting=0, @threads_blocking_new_connections=0, @available=#<ActiveRecord::ConnectionAdapters::ConnectionPool::ConnectionLeasingQueue:0x000055acd5119270 @lock=#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x000055acd5119540 ...>, @cond=#<MonitorMixin::ConditionVariable:0x000055acd5119248 @monitor=#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x000055acd5119540 ...>, @cond=#<Thread::ConditionVariable:0x000055acd5119220>>, @num_waiting=0, @queue=[]>, @lock_thread=false, @reaper=#<ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper:0x000055acd51191d0 @pool=#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x000055acd5119540 ...>, @frequency=60.0>> 
2.6.3 :003 > ActiveRecord::Base.connection.current_database
Traceback (most recent call last):
        1: from (irb):3
ArgumentError (No database file specified. Missing argument: database)

我正在使用這個

class User < ApplicationRecord
  establish_connection :auxillary
end

或者您可以直接在代碼中更改數據庫(例如 rails 控制台)

ActiveRecord::Base.establish_connection(:auxillary)
ActiveRecord::Base.connection.current_database # to check what DB is using now

也許您需要將 DB 定義為:

default: &default
  adapter: oracle_enhanced
  username: dbuser
  password: secret

auxillary: &auxillary
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  migrations_paths: db/auxillary_migrate
  database: db/development_auxillary.sqlite3

development:
  <<: *default
  database: DEVLIMS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM