2017-07-17 60 views
0

我開發使用PostgreSQL數據庫的RoR應用程序,在此基礎上database.yml中的定義:在開發和測試之間採集不一致的行爲?

# PostGre databases 

    default: &default 
     host : localhost 
     adapter: postgresql 
     encoding: unicode 
     pool: 5 
     username: keyman 
     password: keymanApp 
     schema_search_path: "keyman" 

    development: 
     <<: *default 
     database: keyman_dev 

    test: 
     <<: *default 
     database: keyman_test 

我創建了一個小耙套路,所以我可以很容易地刪除和創建我的PostgreSQL數據庫,其中包括我的工作模式搭配:

 namespace :db do 
      desc 'Create database schemas before going for the first migration' 
      task init: ['db:drop','db:create'] do 
      ActiveRecord::Base.connection.execute("CREATE SCHEMA keyman AUTHORIZATION keyman") 
      puts 'Database initialised' 
      end 
      end 

當我運行耙分貝:初始化,執行它無論在開發和測試環境:

$ rake db:init 
Dropped database 'keyman_dev' 
Dropped database 'keyman_test' 
Created database 'keyman_dev' 
Created database 'keyman_test' 
Database initialised 

但結果不一樣:模式'keyman'是爲keyman_dev數據庫創建的,但不是爲keyman_test數據庫創建的。

我需要明確運行rake db:init RAILS_ENV = test以獲取在測試數據庫上創建的模式。

這聽起來很奇怪!你有解釋嗎? 感謝

回答

2

運行bin/rake -T db時,我們可以看到如下描述爲db:createdb:drop

rake db:create    # Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to creating the development and test databases 
rake db:drop    # Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to dropping the development and test databases 

所以,當你運行在開發環境中的任務,他們都做developmenttest數據庫,但沒有按並不意味着其他任務(例如您的自定義任務)會在兩種環境中自動運行,您的任務仍然只在development環境中運行。

在你的耙子任務中應該有這樣的東西得到該查詢在兩個表中運行,儘管這是未經測試的。

environments = Rails.env.development? ? [:development, :test] : [Rails.env.to_sym] 

environments.each do |env| 
    ActiveRecord::Base.establish_connection(env) 
    # do something 
end 
+0

謝謝你這個非常明確的解釋,我將在未來的耙子任務中關注這一點。 – user1185081

相關問題