standalone-migrations icon indicating copy to clipboard operation
standalone-migrations copied to clipboard

"Changing environment config in runtime" not working

Open landovsky opened this issue 7 years ago • 2 comments

Having this

.env vars

DATABASE_URL_TEST=postgres://postgres:hele@postgres/techloop_automator_testik

db/config.yml

test:
  database: techloop_automator_test
  ...

Rakefile

require 'standalone_migrations'

StandaloneMigrations::Tasks.load_tasks

StandaloneMigrations::Configurator.environments_config do |env|
  env.on "test" do
    if (ENV['DATABASE_URL_TEST  '])
      db = URI.parse(ENV['DATABASE_URL_TEST'])
      return {
        :adapter  => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
        :host     => db.host,
        :username => db.user,
        :password => db.password,
        :database => db.path[1..-1],
        :encoding => 'utf8'
      }
    end

    nil
  end
end

When I run rake db:create RAILS_ENV=test, I get:

root@f0db907210df:/automator# rake db:create RAILS_ENV=test
Created database 'techloop_automator_test'

>> it creates techloop_automator_test as opposed to techloop_automator_testik

landovsky avatar Sep 03 '18 11:09 landovsky

Why are you using a different name in DATABASE_URL_TEST=postgres://postgres:hele@postgres/techloop_automator_testik than in your config? Did you try changing in yaml file

test:
  database: techloop_automator_testik

But also maybe try setting the config before loading the tasks? So move StandaloneMigrations::Tasks.load_tasks to after your config do/end block.

lacostenycoder avatar Sep 04 '18 06:09 lacostenycoder

Same issue here. Here is a snippet that worked for me:

require 'tasks/standalone_migrations'
require 'yaml'

StandaloneMigrations::Configurator.environments_config do |env|
  f = YAML.load_file('config.yml')
  db = URI.parse(f['postgres'])
  env.on "default" do |c|
    c["adapter"]  = db.scheme == 'postgres' ? 'postgresql' : db.scheme
    c["host"]     = db.host
    c["port"]     = db.port
    c["username"] = db.user
    c["password"] = db.password
    c["database"] = db.path[1..-1]
    c["encoding"] = 'utf8'
    return c
  end
end

mattes avatar Jan 07 '19 22:01 mattes