Module: Legion::Data::Migration

Extended by:
Logging::Helper
Defined in:
lib/legion/data/migration.rb

Class Method Summary collapse

Methods included from Logging::Helper

handle_exception

Class Method Details

.migrate(connection = Legion::Data.connection, path = "#{__dir__}/migrations") ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/legion/data/migration.rb', line 13

def migrate(connection = Legion::Data.connection, path = "#{__dir__}/migrations", **)
  if defined?(Legion::Mode) && Legion::Mode.respond_to?(:current) && !Legion::Mode.infra?
    log.info "Legion::Data::Migration skipped (mode: #{Legion::Mode.current}, requires: infra)"
    return
  end

  Legion::Settings[:data][:migrations][:version] = Sequel::Migrator.run(connection, path, **)
  log.info("Legion::Data::Migration ran successfully to version #{Legion::Settings[:data][:migrations][:version]}")
  Legion::Settings[:data][:migrations][:ran] = true
rescue Sequel::DatabaseError => e
  handle_exception(e, level: :error, handled: false, operation: :migrate, path: path)
  if e.message.include?('InsufficientPrivilege') || e.message.include?('permission denied')
    raise Sequel::DatabaseError,
          "#{e.message}\n  Hint: the database user lacks CREATE on schema public " \
          '(required for PG 15+). Grant via: GRANT CREATE ON SCHEMA public TO <user>;'
  end
  raise
end