Class: Recipes::DatabaseContainer

Inherits:
Rails::AppBuilder
  • Object
show all
Defined in:
lib/potassium/recipes/database_container.rb

Constant Summary collapse

CONTAINER_VARS =
{
  postgresql: { port: 5432, user: 'postgres' },
  mysql: { port: 3306, user: 'root' }
}
POSTGRESQL_SERVICE =
"image: postgres:\#{Potassium::POSTGRES_VERSION}\nports:\n  - \#{CONTAINER_VARS[:postgresql][:port]}\nenvironment:\n  POSTGRES_USER: \#{CONTAINER_VARS[:postgresql][:user]}\n  POSTGRES_PASSWORD: ''\nvolumes:\n  - postgresql_data:/var/lib/postgresql/data\n"
MYSQL_SERVICE =
"image: \"mysql:\#{Potassium::MYSQL_VERSION}\"\nports:\n  - \#{CONTAINER_VARS[:mysql][:port]}\nenvironment:\n  MYSQL_ALLOW_EMPTY_PASSWORD: 'true'\nvolumes:\n  - mysql_data:/var/lib/mysql\n"

Instance Method Summary collapse

Instance Method Details

#createObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 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

#installObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 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
    "      # Set up required services\n      docker-compose up -d\n\n    TEXT\n\n  insert_into_file 'bin/setup', setup_text, before: \"# Set up database\"\n  create\n  run 'bin/setup'\n  info \"A new container with a \#{get(:database)} database has been created.\"\nend\n"

#installed?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/potassium/recipes/database_container.rb', line 67

def installed?
  file_exist?("docker-compose.yml")
end