class Recipes::DatabaseContainer

Constants

CONTAINER_VARS
MYSQL_SERVICE
POSTGRESQL_SERVICE

Public Instance Methods

create() click to toggle source
# File lib/potassium/recipes/database_container.rb, line 30
def create
  db_type = get(:database)
  return if [:None, :none].include? db_type.to_sym

  copy_file '../assets/docker-compose.yml', 'docker-compose.yml'
  compose = DockerHelpers.new('docker-compose.yml')

  compose.add_service(db_type.to_s, self.class.const_get("#{db_type}_service".upcase))
  compose.add_volume("#{db_type}_data")
  template '../assets/Makefile.erb', 'Makefile'

  run "docker-compose up -d"

  set_env(db_type, CONTAINER_VARS[db_type][:port], CONTAINER_VARS[db_type][:user])
  set_dot_env(db_type, CONTAINER_VARS[db_type][:port], CONTAINER_VARS[db_type][:user])
end
install() click to toggle source
# File lib/potassium/recipes/database_container.rb, line 47
  def install
    database_config = YAML.safe_load(IO.read('config/database.yml'), [], [], true)
    database = database_config['development']['adapter'].gsub(/\d+/, '').to_sym
    set :database, database

    template "../assets/config/database_#{database}.yml.erb", 'config/database.yml'

    setup_text = # setup file is templated on project creation, manual install is needed
      <<~TEXT
        # Set up required services
        docker-compose up -d

      TEXT

    insert_into_file 'bin/setup', setup_text, before: "# Set up database"
    create
    run 'bin/setup'
    info "A new container with a #{get(:database)} database has been created."
  end
installed?() click to toggle source
# File lib/potassium/recipes/database_container.rb, line 67
def installed?
  file_exist?("docker-compose.yml")
end

Private Instance Methods

set_dot_env(_service_name, _port, _user) click to toggle source
# File lib/potassium/recipes/database_container.rb, line 78
  def set_dot_env(_service_name, _port, _user)
    env_text =
      <<~TEXT

        # Database
        DB_HOST=127.0.0.1
        DB_PORT=COMMAND_EXPAND(make services-port SERVICE=#{_service_name} PORT=#{_port})
        DB_USER=#{_user}

      TEXT
    insert_into_file '.env.development', env_text, after: "WEB_CONCURRENCY=1\n"
  end
set_env(_service_name, _port, _user) click to toggle source
# File lib/potassium/recipes/database_container.rb, line 73
def set_env(_service_name, _port, _user)
  ENV["DB_PORT"] = `make services-port SERVICE=#{_service_name} PORT=#{_port}`.squish
  ENV["DB_USER"] = _user
end