dckerize 0.2.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e327ff0b2bc1abdea3a2386231b0077c5ef83ec9
4
- data.tar.gz: 9f3c06125564f73841992c9ad1ce5f36f4f3985e
3
+ metadata.gz: 2d40a2a22aa0a03a3406e9f6dd3e59500935dbe7
4
+ data.tar.gz: 7023801fff0459073316a43f3e2df9e241eeffd4
5
5
  SHA512:
6
- metadata.gz: 76d90d00c9a4af403648924777ef400e3ff095006bfd72ee9ff50ffaa84a0586eaafca8e8f6bf154f5f5e9ec79c3106132a38b66f51e29cd692027cedfef2784
7
- data.tar.gz: 32e6e46e2834254a71e77b9e43efcccff72df9a98755b8f4aeaeaf34e95b86eeed51a8a962e6a7f090ae4873835675abc8e71a879f7a284377f6557b7425512f
6
+ metadata.gz: 9f6a947f040f081cd67ee37b46cee9cc9036ba02d0b04894ff2a6f3f93114cba8311b1fc55729882bb6670195a9f705a6e6f5b4082791d5c260dcf2f1769de9d
7
+ data.tar.gz: 4638884421623e3cf7a04402ef6b2ba58fb07b431ace32e937fe864051716040f0bbd4fcd62c51575906b8d1b2fd75a9c70e4b959048e3fe2b2f3aa7033e88d4
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Dckerize
2
2
  [![Gem Version](https://badge.fury.io/rb/dckerize.svg)](http://badge.fury.io/rb/dckerize)
3
+ [![Build Status](https://travis-ci.org/pacuna/dckerize.svg?branch=master)](https://travis-ci.org/pacuna/dckerize)
3
4
 
4
5
  Supercharged Rails development using Docker and Vagrant
5
6
 
@@ -14,6 +15,7 @@ You'll get
14
15
  - An nginx/passenger container environment for serving your application and all the necessary configurations.
15
16
  - A separate container running MySQL/postgres for your DB.
16
17
  - A separate container for keeping your data using the data-only container pattern.
18
+ - Extras (elasticsearch for now)
17
19
 
18
20
  ## Requirements
19
21
 
@@ -28,9 +30,22 @@ You'll get
28
30
 
29
31
  You need to have a Rails application already created.
30
32
 
31
- In the root of your application run:
33
+ General usage:
34
+
35
+ $ dckerize up APP_NAME --database=[mysql|postgres] [--extras=elasticsearch]
36
+
37
+ So for example in the root of your application run:
38
+
39
+ $ dckerize up APP_NAME --database=mysql
40
+
41
+ Or
42
+
43
+ $ dckerize up APP_NAME --database=postgres
44
+
45
+ Or
46
+
47
+ $ dckerize up APP_NAME --database=postgres --extras=elasticsearch
32
48
 
33
- $ dckerize up APP_NAME --database=[mysql|postgres]
34
49
 
35
50
  Where APP_NAME should be the same name of your application and you must specify the database
36
51
  that you want to use.
@@ -62,6 +77,15 @@ In your config/database.yml add these lines to your configuration:
62
77
  password: <%= ENV['POSTGRES_ENV_POSTGRES_PASSWORD'] %>
63
78
  host: postgres
64
79
 
80
+ ### Extras configuration
81
+
82
+ #### Elasticsearch
83
+
84
+ If you're using the elasticsearch-rails gem, you just need to specify the environment variables
85
+ linked between the containers in your elasticsearch initializer and you'll be ready to go
86
+
87
+ ELASTICSEARCH_URL = ENV['ELASTICSEARCH_URL'] || ENV['ELASTICSEARCH_PORT_9200_TCP_ADDR']
88
+
65
89
  ### Developing
66
90
 
67
91
  Go inside the generated vagrant folder and run
@@ -104,6 +128,14 @@ And etc.
104
128
  The nginx container is mapping its port 80 with the port 80 of the guest host, and since we're declaring a private network in our Vagranfile
105
129
  you can access your application by visiting http://192.168.50.4.
106
130
 
131
+ ## TODO
132
+
133
+ - [x] Support for more services (redis, elasticsearch)
134
+ - Support for other ruby/rails versions
135
+ - More workflow examples
136
+
137
+
138
+
107
139
  ## Video demo
108
140
 
109
141
  [![Dckerize](http://img.youtube.com/vi/X8IVAoBUtbs/0.jpg)](http://www.youtube.com/watch?v=X8IVAoBUtbs)
data/dckerize.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib", "templates"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.8"
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "rspec"
24
24
  end
data/exe/dckerize CHANGED
@@ -2,23 +2,9 @@
2
2
 
3
3
  require "dckerize"
4
4
 
5
- up_command = ARGV[0]
6
- app_name = ARGV[1]
7
- db_name = ARGV[2]
8
-
9
- if up_command.to_s != 'up' || app_name.to_s == '' || db_name.to_s == ''
10
- puts 'Usage: dckerize up APP_NAME --database==[postgres|mysql]'
11
- exit 0;
12
- end
13
-
14
- if db_name == '--database=postgres'
15
- generator = Dckerize::Generator.new(app_name, 'postgres')
16
- elsif db_name == '--database=mysql'
17
- generator = Dckerize::Generator.new(app_name, 'mysql')
18
- else
19
- puts 'Usage: dckerize up APP_NAME --database==[postgres|mysql]'
20
- exit 0;
5
+ begin
6
+ Dckerize::Runner.new(ARGV).execute
7
+ rescue Exception => e
8
+ puts e.message
9
+ exit 0
21
10
  end
22
- generator.up
23
-
24
-
@@ -0,0 +1,33 @@
1
+ module Dckerize
2
+ class Extra
3
+ attr_accessor :name
4
+ def initialize(name)
5
+ @name = name
6
+ end
7
+
8
+ def image
9
+ if name == 'elasticsearch'
10
+ 'elasticsearch'
11
+ end
12
+ end
13
+
14
+ def service_name
15
+ if name == 'elasticsearch'
16
+ 'elasticsearch'
17
+ end
18
+ end
19
+
20
+ def alias
21
+ if name == 'elasticsearch'
22
+ 'elasticsearch'
23
+ end
24
+ end
25
+
26
+ def env_variables
27
+ if name == 'elasticsearch'
28
+ ['ELASTICSEARCH_PORT_9200_TCP_ADDR', 'ELASTICSEARCH_URL']
29
+ end
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,57 @@
1
+ module Dckerize
2
+ class Generator
3
+ attr_accessor :name, :db, :extras
4
+ def initialize(name, db, extras = [])
5
+ if db == 'mysql'
6
+ @db = 'mysql:5.7'
7
+ @db_password = 'MYSQL_ROOT_PASSWORD'
8
+ @db_password_env = 'MYSQL_ENV_MYSQL_ROOT_PASSWORD'
9
+ @db_host_env = 'MYSQL_PORT_3306_TCP_ADDR'
10
+ @db_name_for_data_volume = 'mysql'
11
+ @db_service_name = 'mysql'
12
+ elsif db == 'postgres'
13
+ @db = 'postgres'
14
+ @db_password = 'POSTGRES_PASSWORD'
15
+ @db_password_env = 'POSTGRES_ENV_POSTGRES_PASSWORD'
16
+ @db_host_env = 'POSTGRES_PORT_5432_TCP_ADDR'
17
+ @db_name_for_data_volume = 'postgresql'
18
+ @db_service_name = 'postgres'
19
+ end
20
+ @name = name
21
+
22
+ @extras = Array.new
23
+ extras.each do |extra|
24
+ @extras << Dckerize::Extra.new(extra)
25
+ end
26
+ end
27
+
28
+ def get_binding
29
+ binding
30
+ end
31
+
32
+ def templates
33
+ Dckerize.templates
34
+ end
35
+
36
+ def up
37
+ FileUtils.mkdir_p('conf')
38
+ FileUtils.mkdir_p('vagrant')
39
+
40
+ create_from_template('Vagrantfile.erb', 'vagrant/Vagrantfile')
41
+ create_from_template('Dockerfile.erb', 'Dockerfile')
42
+ create_from_template('site.conf.erb', "conf/#{@name}.conf")
43
+ create_from_template('env.conf.erb', "conf/env.conf")
44
+ create_from_template('docker-compose.yml.erb', "docker-compose.yml")
45
+ create_from_template('docker-compose-installer.sh.erb', "vagrant/docker-compose-installer.sh")
46
+ end
47
+
48
+ private
49
+ def create_from_template(template_name, output_file)
50
+ template = ERB.new(File.read("#{templates}/#{template_name}"), nil, '-')
51
+ result = template.result(binding)
52
+ File.open("#{output_file}", 'w') { |file| file.write(result) }
53
+ end
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,40 @@
1
+ module Dckerize
2
+ class Runner
3
+
4
+ VALID_OPTIONS = ['--database=mysql', '--database=postgres', '--extras=elasticsearch']
5
+ ERROR_MESSAGE = 'USAGE: dckerize up --database=[mysql|postgres] [--extras=elasticsearch]'
6
+ def initialize(options)
7
+ @options = options
8
+ end
9
+
10
+ def execute
11
+ extras = []
12
+ db = ''
13
+ raise ERROR_MESSAGE unless valid?
14
+ @options[2..-1].each do |option|
15
+ splitted_option = option.split('=')
16
+ if splitted_option[0] == '--database'
17
+ db = splitted_option[1]
18
+ elsif splitted_option[0] == '--extras'
19
+ extras << splitted_option[1].split(',')
20
+ else
21
+ raise_error ERROR_MESSAGE
22
+ end
23
+ end
24
+ Dckerize::Generator.new(@options[1], db, extras.flatten).up
25
+ end
26
+
27
+ def valid?
28
+ # first option should always be up
29
+ return false if @options[0] != 'up'
30
+ # db is mandatory
31
+ return false unless @options.grep(/--database=/).any?
32
+ # only valid options allowed
33
+ @options[2..-1].each do |option|
34
+ return false unless VALID_OPTIONS.include?(option)
35
+ end
36
+ true
37
+ end
38
+ end
39
+
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Dckerize
2
- VERSION = "0.2.3"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/dckerize.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require "dckerize/version"
2
+ require "dckerize/extra"
3
+ require "dckerize/generator"
4
+ require "dckerize/runner"
2
5
  require 'erb'
3
6
  require 'fileutils'
4
7
 
@@ -11,53 +14,4 @@ module Dckerize
11
14
  File.join root, 'templates'
12
15
  end
13
16
 
14
- class Generator
15
- attr_accessor :name, :db
16
- def initialize(name, db)
17
- if db == 'mysql'
18
- @db = 'mysql:5.7'
19
- @db_password = 'MYSQL_ROOT_PASSWORD'
20
- @db_password_env = 'MYSQL_ENV_MYSQL_ROOT_PASSWORD'
21
- @db_host_env = 'MYSQL_PORT_3306_TCP_ADDR'
22
- @db_name_for_data_volume = 'mysql'
23
- @db_service_name = 'mysql'
24
- elsif db == 'postgres'
25
- @db = 'postgres'
26
- @db_password = 'POSTGRES_PASSWORD'
27
- @db_password_env = 'POSTGRES_ENV_POSTGRES_PASSWORD'
28
- @db_host_env = 'POSTGRES_PORT_5432_TCP_ADDR'
29
- @db_name_for_data_volume = 'postgresql'
30
- @db_service_name = 'postgres'
31
- end
32
- @name = name
33
- end
34
-
35
- def get_binding
36
- binding
37
- end
38
-
39
- def templates
40
- Dckerize.templates
41
- end
42
-
43
- def up
44
- FileUtils.mkdir_p('conf')
45
- FileUtils.mkdir_p('vagrant')
46
-
47
- create_from_template('Vagrantfile.erb', 'vagrant/Vagrantfile')
48
- create_from_template('Dockerfile.erb', 'Dockerfile')
49
- create_from_template('site.conf.erb', "conf/#{@name}.conf")
50
- create_from_template('env.conf.erb', "conf/env.conf")
51
- create_from_template('docker-compose.yml.erb', "docker-compose.yml")
52
- create_from_template('docker-compose-installer.sh.erb', "vagrant/docker-compose-installer.sh")
53
- end
54
-
55
- private
56
- def create_from_template(template_name, output_file)
57
- template = ERB.new(File.read("#{templates}/#{template_name}"))
58
- result = template.result(binding)
59
- File.open("#{output_file}", 'w') { |file| file.write(result) }
60
- end
61
-
62
- end
63
17
  end
@@ -19,6 +19,9 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
19
19
  config.vm.provision "docker" do |d|
20
20
  d.pull_images "<%= @db %>"
21
21
  d.pull_images "phusion/passenger-ruby22:0.9.15"
22
+ <%- @extras.each do |extra| -%>
23
+ d.pull_images "<%= extra.image %>"
24
+ <%- end -%>
22
25
  end
23
26
 
24
27
 
@@ -22,5 +22,13 @@ webapp:
22
22
  - PASSENGER_APP_ENV=development
23
23
  links:
24
24
  - <%= @db_service_name %>:<%= @db_service_name %>
25
+ <%- @extras.each do |extra| -%>
26
+ - <%= extra.service_name %>:<%= extra.alias %>
27
+ <%- end -%>
25
28
  volumes:
26
29
  - /<%= @name %>:/home/app/<%= @name %>
30
+ <%- @extras.each do |extra| -%>
31
+ <%= extra.service_name %>:
32
+ image: <%= extra.image %>
33
+ name: <%= @name %>-<%= extra.service_name %>
34
+ <%- end -%>
@@ -1,2 +1,7 @@
1
1
  env <%= @db_password_env %>;
2
2
  env <%= @db_host_env %>;
3
+ <% @extras.each do |extra| -%>
4
+ <% extra.env_variables.each do |env_variable| -%>
5
+ env <%= env_variable %>;
6
+ <% end -%>
7
+ <% end -%>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dckerize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Acuña
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-07 00:00:00.000000000 Z
11
+ date: 2015-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.8'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +72,9 @@ files:
72
72
  - dckerize.gemspec
73
73
  - exe/dckerize
74
74
  - lib/dckerize.rb
75
+ - lib/dckerize/extra.rb
76
+ - lib/dckerize/generator.rb
77
+ - lib/dckerize/runner.rb
75
78
  - lib/dckerize/version.rb
76
79
  - templates/Dockerfile.erb
77
80
  - templates/Vagrantfile.erb