2016-01-12 35 views
2

我試圖在rails 5.0.0.beta1中實現兩個數據庫設置。一切似乎都很順利,但我遇到了一些奇怪的事情。模型連接到指定的數據庫,關聯工作,遷移(經過一些調整)也可以正常工作。運行遷移後,在兩個數據庫中都會出現一個名爲active_record_internal_metadatas的附加表。當我在rails 4.2.5上測試這個設置時,沒有這種東西。有人可以解釋這個問題嗎?Rails 5.0.0.beta1,兩個數據庫安裝程序創建額外的active_record_internal_metadatas表

的雙重數據庫設置的設置:

  • database.yml

    default: &default 
    adapter: mysql2 
    encoding: utf8 
    pool: 5 
    username: root 
    password: 
    socket: /tmp/mysql.sock 
    
    development: 
        <<: *default 
        database: app_name_development_first 
    
    development_second: 
        <<: *default 
        database: app_name_development_second 
    
  • second_db_connection.rb - 它處理到第二個數據庫連接的模型。應該在第二個數據庫中的所有模型都必須從這個模型繼承。

    class SecondDbConnection < ActiveRecord::Base 
        establish_connection "#{Rails.env}_second".to_sym 
        self.abstract_class = true 
    end 
    
  • application_controller.rb - 第二數據庫

    class ApplicationController < ActionController::API 
        around_filter :cache_other_db_connections 
    
        private 
        def cache_other_db_connections 
         SecondDbConnection.connection.cache { yield } 
        end 
    end 
    
  • db.rake緩存連接 - 覆蓋遷移任務

    namespace :db do 
        task :migrate do 
        Rake::Task['db:migrate_first'].invoke 
        Rake::Task['db:migrate_second'].invoke 
        end 
    
        task :migrate_first do 
        ActiveRecord::Base.establish_connection ("#{Rails.env}".to_sym) 
        ActiveRecord::Migrator.migrate('db/db_first/migrate/') 
        ActiveRecord::Base.connection.close 
        end 
    
        task :migrate_second do 
        ActiveRecord::Base.establish_connection ("#{Rails.env}_second".to_sym) 
        ActiveRecord::Migrator.migrate('db/db_second/migrate/') 
        ActiveRecord::Base.connection.close 
        end 
    end 
    

回答

0

這似乎是一個Rails 5功能。下面是從this pull request commit引入它的報價:

防止在生產數據庫

這PR引入 鍵/值類型存儲到活動記錄可被用於存儲 內部值破壞作用。它是#21237 cc @sgrif @matthewd的替代實現。

現在可以通過 事故對您的生產數據庫運行測試。雖然很少,但作爲一個軼事數據點,Heroku收到數據庫的一個不平凡數目的請求數 由於這種情況發生。在這些情況下,損失可能很大。

爲防止針對生產運行測試,我們可以存儲 「環境」版本,該版本在將數據庫遷移到 新內部表格時使用。在執行測試之前,我們可以看到數據庫 是否在protected_environments中列出並中止。有一本手冊 逃生閥強制此檢查發生與環境 變量DISABLE_DATABASE_ENVIRONMENT_CHECK=1

+0

非常感謝,這個公關並沒有出現,當我googling它:) –