From: Michal Fojtik <[email protected]> We don't want to run any migrations automatically during Deltacloud server boot time, to give users chance to backup data, etc.
This patch will provide a nice warning message if you start Deltacloud and you have some pending migrations to run. Signed-off-by: Michal fojtik <[email protected]> --- server/bin/deltacloud-db-upgrade | 18 +++++++++++------- server/lib/initializers/database_initialize.rb | 19 ++++++++++++++++++- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/server/bin/deltacloud-db-upgrade b/server/bin/deltacloud-db-upgrade index 2698350..5b37bbb 100755 --- a/server/bin/deltacloud-db-upgrade +++ b/server/bin/deltacloud-db-upgrade @@ -1,13 +1,17 @@ #!/usr/bin/env ruby -ENV['API_VERBOSE'] = 'true' +require 'rubygems' -load File.join(File.dirname(__FILE__), '..', 'lib', 'db.rb') +require 'require_relative' if RUBY_VERSION < '1.9' -# Initialize the database -# -db = Deltacloud.initialize_database +require_relative './../lib/initializers/mock_initialize' +require_relative './../lib/initializers/database_initialize' -# Apply the migrations +# The DATABASE_UPGRADE constant is set to true if we have discovered +# pending migrations in DATABASE_MIGRATIONS_DIR. # -Sequel::Migrator.apply(db, File.join(File.dirname(__FILE__), '..', 'db', 'migrations')) + +if DATABASE_UPGRADE + puts "Upgrading database schema to the latest version..." + Sequel::Migrator.apply(DATABASE, DATABASE_MIGRATIONS_DIR) +end diff --git a/server/lib/initializers/database_initialize.rb b/server/lib/initializers/database_initialize.rb index 32badb2..ae9d247 100644 --- a/server/lib/initializers/database_initialize.rb +++ b/server/lib/initializers/database_initialize.rb @@ -12,6 +12,9 @@ require_relative '../db' # Sequel::Model.plugin :validation_class_methods +# Enable Sequel migrations extension +Sequel.extension :migration + # For JRuby we need to different Sequel driver # sequel_driver = (RUBY_PLATFORM=='java') ? 'jdbc:sqlite:' : 'sqlite://' @@ -25,4 +28,18 @@ sequel_driver = (RUBY_PLATFORM=='java') ? 'jdbc:sqlite:' : 'sqlite://' DATABASE_LOCATION = ENV['DATABASE_LOCATION'] || "#{sequel_driver}#{File.join(BASE_STORAGE_DIR, 'db.sqlite')}" -Deltacloud::initialize_database +DATABASE = Deltacloud::initialize_database + +# Detect if there are some pending migrations to run. +# We don't actually run migrations during server startup, just print +# a warning to console +# + +DATABASE_MIGRATIONS_DIR = File.join(File.dirname(__FILE__), '..', '..', 'db', 'migrations') + +unless Sequel::Migrator.is_current?(DATABASE, DATABASE_MIGRATIONS_DIR) + warn "WARNING: The database needs to be upgraded. Run: 'deltacloud-db-upgrade' command." + DATABASE_UPGRADE = true +else + DATABASE_UPGRADE = false +end -- 1.8.1.2
