Ich entwickle eine RoR Anwendung einer PostgreSQL-Datenbank, basierend auf dieser database.yml Definition:Rake uneinheitliches Verhalten zwischen Entwickler und Test?
# 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
ich eine kleine Rake Routine erstellt, so kann ich meine PostgreSQL-Datenbank, einschließlich dem Schema arbeite ich einfach fallen lassen und erstellen mit:
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
Wenn ich rake db laufen: init wird sowohl auf dev und Testumgebungen ausgeführt:
$ rake db:init
Dropped database 'keyman_dev'
Dropped database 'keyman_test'
Created database 'keyman_dev'
Created database 'keyman_test'
Database initialised
Aber Das Ergebnis ist nicht das gleiche: Das Schema 'keyman' wird für die Datenbank keyman_dev erstellt, nicht jedoch für die Datenbank keyman_test.
Ich muss explizit Rake ausführen db: init RAILS_ENV = Test, um das Schema in der Test-Datenbank erstellt zu bekommen.
Es klingt seltsam für mich! Hast du eine Erklärung? Dank
Vielen Dank für diese sehr klare Erklärung, ich werde darauf in meinen zukünftigen Rake-Aufgaben achten. – user1185081