platter 0.0.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 84c526d7bc9e4aee3d4d0a400173bdab8fb8e7d5
4
- data.tar.gz: ba51f7c814dccd80bc51753eaf459a3ff381e562
3
+ metadata.gz: 781b2551b4178026179da0ef1ac2b9d11ae03869
4
+ data.tar.gz: 667862351c3601f7c05aa955735b03be896b245e
5
5
  SHA512:
6
- metadata.gz: 3b588d29b10108df6b722d0f95d32a9ae807c54b960a5dd38f90ad497e7f3f460b214cb6274765781cbb45146686e8e6c748066863da222a1cc4abb475f9d225
7
- data.tar.gz: 29afb5d063dcd8f74bc9ec280285a1d56b6eb37f3a282289bc427bb0873e9a7216e7565ed4d3a3b1a36685ed21ef6f05e801ea28ca70c7c3bf1f8b3737fbf63b
6
+ metadata.gz: bad23068a0eacf32de5146530ddbf89307c80d1959e0124693d8cb03e80eb6ac5d8e239dbafcb0c9cd4826ca904a07e534c49464d80b773908399eb4c22da069
7
+ data.tar.gz: 0f73ef4a3331dc7b66a598c6c8cece7b483b3b834e09d823ed2a911750cce4aa36692f3f07cc5312aec5b14ac935e015bfd6e3de85ad042298a4bd76a09ee180
data/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ [![Code Climate](https://codeclimate.com/github/IcaliaLabs/platter/badges/gpa.svg)](https://codeclimate.com/github/IcaliaLabs/platter)
2
+ [![Test Coverage](https://codeclimate.com/github/IcaliaLabs/platter/badges/coverage.svg)](https://codeclimate.com/github/IcaliaLabs/platter/coverage)
3
+ [![Issue Count](https://codeclimate.com/github/IcaliaLabs/platter/badges/issue_count.svg)](https://codeclimate.com/github/IcaliaLabs/platter)
4
+
1
5
  # [Platter](https://github.com/IcaliaLabs/platter)
2
6
 
3
7
  [![Gem Version](https://badge.fury.io/rb/platter.svg)](http://badge.fury.io/rb/platter)
@@ -145,4 +149,4 @@ Keep track of new feautres, development issues and community news.
145
149
 
146
150
  ## Copyright and license
147
151
 
148
- Code and documentation copyright 2013-2014 Icalia Labs. Code released under [the MIT license](LICENSE).
152
+ Code and documentation copyright 2013-2014 Icalia Labs. Code released under [the MIT license](LICENSE).
@@ -11,6 +11,14 @@ module Platter
11
11
  template "Gemfile.erb", "Gemfile"
12
12
  end
13
13
 
14
+ def setup_gems
15
+ run "docker-compose run --rm web bundle"
16
+ end
17
+
18
+ def setup_db
19
+ run "docker-compose run --rm web rake db:create"
20
+ end
21
+
14
22
  #API builds
15
23
  #
16
24
  def add_api_support
@@ -48,6 +56,35 @@ gem "active_model_serializers", github: "rails-api/active_model_serializers", br
48
56
  git commit: "-m 'Project initialization using Platter'"
49
57
  end
50
58
 
59
+ # Docker Build
60
+ #
61
+ def setup_docker_compose
62
+ template "docker-compose.yml.erb", "docker-compose.yml"
63
+ create_file "dev.env"
64
+ end
65
+
66
+ def provide_dev_entrypoint
67
+ template "dev-entrypoint.sh", "dev-entrypoint"
68
+ run "chmod a+x dev-entrypoint"
69
+ end
70
+
71
+ def provide_db_script
72
+ template "check_or_setup_db.erb", "bin/check_or_setup_db"
73
+ run "chmod a+x bin/check_or_setup_db"
74
+ end
75
+
76
+ def provide_attach_script
77
+ template "attach.erb", "bin/attach"
78
+ run "chmod a+x bin/attach"
79
+ end
80
+
81
+ def provide_restoredb_script
82
+ empty_directory "db/dumps"
83
+ create_file "db/dumps/.keep"
84
+ template "restoredb.erb", "bin/restoredb"
85
+ run "chmod a+x bin/restoredb"
86
+ end
87
+
51
88
  #Server build
52
89
  #
53
90
  def setup_server
@@ -56,11 +93,6 @@ gem "active_model_serializers", github: "rails-api/active_model_serializers", br
56
93
 
57
94
  # Development builds
58
95
  #
59
- def provide_development_setup_bin
60
- template "bin_development_setup.rb", "bin/setup", port: PORT, force: true
61
- run "chmod a+x bin/setup"
62
- end
63
-
64
96
  def setup_development_mail_delivery_strategy
65
97
  inject_into_file "config/environments/development.rb",
66
98
  %Q{
@@ -93,7 +125,7 @@ gem "active_model_serializers", github: "rails-api/active_model_serializers", br
93
125
  g.javascripts false
94
126
  g.helper false
95
127
  end
96
-
128
+
97
129
  config.autoload_paths += %W(#{config.root}/lib)
98
130
  },
99
131
  after: "config.active_record.raise_in_transactional_callbacks = true"
@@ -102,7 +134,7 @@ gem "active_model_serializers", github: "rails-api/active_model_serializers", br
102
134
  #TEST builds
103
135
  #
104
136
  def init_rspec
105
- generate "rspec:install"
137
+ run "docker-compose run --rm web rspec:install"
106
138
  end
107
139
 
108
140
  def add_support_rspec_files
@@ -118,29 +150,12 @@ gem "active_model_serializers", github: "rails-api/active_model_serializers", br
118
150
  template "production_env.erb", "config/environments/staging.rb"
119
151
  end
120
152
 
121
- #ACTIVE JOB builds
122
- #
123
- def init_delayed_job
124
- generate "delayed_job:active_record"
125
- run `bundle exec rake db:create db:migrate`
126
- end
127
-
128
- def add_delayed_job_active_job_configuration
129
- inject_into_file 'config/application.rb',
130
- %q{
131
-
132
- # ActiveJob Configuration
133
- config.active_job.queue_adapter = :delayed_job
134
- },
135
- after: "config.active_record.raise_in_transactional_callbacks = true"
136
- end
137
-
138
153
  #MAILER builds
139
154
  #
140
155
  def init_sendgrid_initialize_file
141
156
  template "mailer_initializer_config.erb", "config/initializers/mailer_setup.rb"
142
157
  end
143
-
158
+
144
159
 
145
160
  def add_exception_notification_mailer_configuration
146
161
  %w{ production staging }.each do |env|
@@ -150,8 +165,8 @@ gem "active_model_serializers", github: "rails-api/active_model_serializers", br
150
165
  #Exception Notification configuration
151
166
  config.middleware.use ExceptionNotification::Rack,
152
167
  :email => {
153
- :email_prefix => "[Printoo] ",
154
- :sender_address => %{"Staging Exception" <exception@#{app_name.downcase}-#{env}.herokuapp.com>},
168
+ :email_prefix => "[#{app_name}] ",
169
+ :sender_address => %{"Exception" <exception@#{app_name.downcase}-#{env}.com>},
155
170
  :exception_recipients => %w{}
156
171
  }
157
172
  },
@@ -171,5 +186,18 @@ gem "active_model_serializers", github: "rails-api/active_model_serializers", br
171
186
  after: "config.active_record.dump_schema_after_migration = false"
172
187
  end
173
188
  end
189
+
190
+ def app
191
+ super
192
+ if options["skip_assets"]
193
+ remove_dir "app/assets"
194
+ remove_dir "app/views"
195
+ remove_dir "app/helpers"
196
+ end
197
+ end
198
+
199
+ def vendor_stylesheets
200
+ empty_directory_with_keep_file 'vendor/assets/stylesheets' unless options[:skip_assets]
201
+ end
174
202
  end
175
203
  end
@@ -3,6 +3,18 @@ require 'rails/generators/rails/app/app_generator'
3
3
 
4
4
  module Platter
5
5
  class AppGenerator < Rails::Generators::AppGenerator
6
+
7
+ def initialize(*args)
8
+ super
9
+ if @options["api"]
10
+ backup_options = Marshal.load(Marshal.dump(@options))
11
+ backup_options["skip_javascript"] = true
12
+ backup_options["skip_sprockets"] = true
13
+ backup_options["skip_assets"] = true
14
+ @options = backup_options
15
+ end
16
+ end
17
+
6
18
  class_option :database, type: :string, aliases: "-d", default: "postgresql",
7
19
  desc: "Configure for selected database. PostgreSQL by default."
8
20
 
@@ -15,9 +27,6 @@ module Platter
15
27
  class_option :api, type: :boolean, default: false,
16
28
  desc: "Adds API support gems"
17
29
 
18
- class_option :skip_bundle, type: :boolean, aliases: "-B", default: true,
19
- desc: "Don't run bundle install"
20
-
21
30
  def finish_template
22
31
  invoke :platter
23
32
  super
@@ -26,19 +35,27 @@ module Platter
26
35
  def platter
27
36
  invoke :custom_gemfile
28
37
  invoke :setup_development_environment
29
- invoke :setup_test_environment
30
38
  invoke :setup_staging_environment
31
- invoke :add_active_job_configuration
32
39
  invoke :add_api_support
33
40
  invoke :setup_mailer
34
41
  invoke :setup_server
42
+ invoke :setup_docker
43
+ invoke :setup_gems
44
+ invoke :setup_db
45
+ invoke :setup_test_environment
35
46
  invoke :setup_git
36
47
  end
37
48
 
38
49
  def custom_gemfile
39
50
  build :replace_gemfile
51
+ end
52
+
53
+ def setup_gems
54
+ build :setup_gems
55
+ end
40
56
 
41
- bundle_command 'install'
57
+ def setup_db
58
+ build :setup_db
42
59
  end
43
60
 
44
61
  def add_api_support
@@ -62,9 +79,17 @@ module Platter
62
79
  build :setup_server
63
80
  end
64
81
 
82
+ def setup_docker
83
+ say "Adding docker-compose.yml file"
84
+ build :setup_docker_compose
85
+ build :provide_db_script
86
+ build :provide_dev_entrypoint
87
+ build :provide_attach_script
88
+ build :provide_restoredb_script
89
+ end
90
+
65
91
  def setup_development_environment
66
92
  say "Setting up the development environment"
67
- build :provide_development_setup_bin
68
93
  build :setup_development_mail_delivery_strategy
69
94
  build :fix_i18n_deprecation_warning
70
95
  build :provide_generators_configuration
@@ -81,12 +106,6 @@ module Platter
81
106
  build :copy_production_env_to_staging
82
107
  end
83
108
 
84
- def add_active_job_configuration
85
- say "Setting up ActiveJob with DelayedJob"
86
- build :init_delayed_job
87
- build :add_delayed_job_active_job_configuration
88
- end
89
-
90
109
  def setup_mailer
91
110
  say "Setting up Sendgrid configuration"
92
111
  build :init_sendgrid_initialize_file
@@ -1,5 +1,5 @@
1
1
  module Platter
2
- RAILS_VERSION = "4.2.1"
3
- RUBY_VERSION = "2.2.3"
4
- VERSION = "0.0.4"
2
+ RAILS_VERSION = "4.2"
3
+ RUBY_VERSION = "2.2.5"
4
+ VERSION = "0.2.0"
5
5
  end
data/platter.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'platter/version'
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "bundler", "~> 1.7"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
 
25
- spec.add_dependency 'rails', Platter::RAILS_VERSION
26
- spec.add_dependency 'thor'
25
+ spec.add_dependency "rails", "~> #{Platter::RAILS_VERSION}"
26
+ spec.add_dependency "thor"
27
27
  end
@@ -3,13 +3,13 @@ source "https://rubygems.org"
3
3
  ruby "<%= Platter::RUBY_VERSION %>"
4
4
 
5
5
  gem "rails", "<%= Platter::RAILS_VERSION %>"
6
- gem "delayed_job_active_record"
7
6
  gem "jquery-rails"
8
7
  gem "pg"
9
8
  gem "sass-rails", "~> 5.0"
10
9
  gem "coffee-rails", "~> 4.1.0"
11
10
  gem "uglifier", ">= 1.3.0"
12
11
  gem "puma"
12
+ gem "therubyracer"
13
13
 
14
14
  group :development do
15
15
  gem "spring"
@@ -1,19 +1,122 @@
1
- # <%= app_name.humanize %>
1
+ # Run <%= app_name.humanize %> using Docker
2
2
 
3
- # Getting started
3
+ This guide will help you get started to setup the project using Docker, and keep using it as part of your development process.
4
4
 
5
- This application assumes you have at least Ruby, Postgres and other dependencies to run.
6
- If that is not the case you can use [kaishi] to install everything you need.
5
+ ## Table of contents
6
+ - [Installing Docker](#installing-docker)
7
+ - [Running <%= app_name.humanize %>](#running-<%= app_name %>)
8
+ - [Stop <%= app_name.humanize %>](#stop-<%= app_name %>)
9
+ - [Restoring DB](#restoring-db)
10
+ - [Debugging](#debugging)
11
+ - [Icalia Guides](#icalia-guides)
7
12
 
8
- [kaishi]: https://github.com/IcaliaLabs/kaishi
13
+ ## Installing Docker
9
14
 
10
- After setting up you can start using the application:
15
+ The first thing you need to do before start is to install `Docker`
11
16
 
12
- % rails server
17
+ [https://www.docker.com/products/docker](https://www.docker.com/products/docker)
13
18
 
14
- Or if you feel like using Foreman (comes with kaishi):
19
+ If Docker was successfully installed, you should be good to go.
15
20
 
16
- % foreman start
21
+ ## Running <%= app_name.humanize %>
22
+
23
+ To run <%= app_name.humanize %> you can simple execute the following command inside the project directory:
24
+
25
+ ```
26
+ % docker-compose up -d
27
+ ```
28
+
29
+ That command will lift every service <%= app_name.humanize %> needs, such as the `rails server`, `postgres`.
30
+
31
+
32
+ It may take a while before you see anything, you can follow the logs of the containers with:
33
+
34
+ ```
35
+ % docker-compose logs
36
+ ```
37
+
38
+ Once you see an output like this:
39
+
40
+ ```
41
+ web_1 | => Booting Puma
42
+ web_1 | => Rails 4.2.0 application starting in development on http://0.0.0.0:3000
43
+ web_1 | => Run `rails server -h` for more startup options
44
+ web_1 | => Ctrl-C to shutdown server
45
+ web_1 | Puma starting in single mode...
46
+ web_1 | * Version 3.4.0 (ruby 2.2.5-p319), codename: Owl Bowl Brawl
47
+ web_1 | * Min threads: 0, max threads: 16
48
+ web_1 | * Environment: development
49
+ web_1 | * Listening on tcp://0.0.0.0:3000
50
+ web_1 | Use Ctrl-C to stop
51
+ ```
52
+
53
+ This means the project is up and running. It is worth mention that the `docker-compose` command will create the database if is not there yet.
54
+
55
+ ## Stop <%= app_name.humanize %>
56
+
57
+ In order to stop <%= app_name.humanize %> as a whole you can run:
58
+
59
+ ```
60
+ % docker-compose stop
61
+ ```
62
+
63
+ This will stop every container, but if you need to stop one in particular, you can specify it like:
64
+
65
+ ```
66
+ % docker-compose stop web
67
+ ```
68
+
69
+ `web` is the service name located on the `docker-compose.yml` file, there you can see the services name and stop each of them if you need to.
70
+
71
+ ## Restoring DB
72
+
73
+ You probably won't be working with a blank database, so once you are able to run <%= app_name.humanize %> you can restore the database, to do it, first stop all services:
74
+
75
+ ```
76
+ % docker-compose stop
77
+ ```
78
+
79
+ Then just lift up the `db` service:
80
+
81
+ ```
82
+ % docker-compose up -d db
83
+ ```
84
+
85
+ The next step is to login to the database container:
86
+
87
+ ```
88
+ % docker exec -ti <%= app_name.downcase %>_db_1 bash
89
+ ```
90
+
91
+ This will open up a bash session in to the database container.
92
+
93
+ Up to this point we just need to download or ask the project leader for a database dump and copy under `<%= app_name %>/db/dumps`, this directory is mounted on the container, so you will be able to restore it with:
94
+
95
+ ```
96
+ root@a3f695b39869:/# bin/restoredb <%= app_name.downcase %>_dev db/dumps/<databaseDump>
97
+ ```
98
+
99
+ If you want to see how this script works, you can find it under `bin/restoredb`
100
+
101
+ Once the script finishes its execution you can just exit the session from the container and lift the other services:
102
+
103
+ ```
104
+ % docker-compose up -d
105
+ ```
106
+
107
+ ## Debugging
108
+
109
+ We know you love to use `debugger`, and who doesn't, that's why we put together a script to attach the `web` container service into your terminal session.
110
+
111
+ What we mean by this, is that if you add a `debugger` or `binding.pry` on a part of the code, you can run:
112
+
113
+ ```
114
+ % bin/attach web
115
+ ```
116
+
117
+ This will display the logs from the rails app, as well as give you access to stop the execution on the debugging point as you would expect.
118
+
119
+ **Take note that if you kill this process you will kill the web service, and you will probably need to lift it up again.**
17
120
 
18
121
  ## Icalia Guides
19
122
 
@@ -0,0 +1,16 @@
1
+ #! /bin/bash
2
+ set -e
3
+
4
+ SERVICE_NAME=$1
5
+
6
+ read -a ARR <<<$(docker-compose ps | grep "${SERVICE_NAME}_")
7
+
8
+ CONTAINER_NAME=${ARR[0]}
9
+ CONTAINER_STATUS=${ARR[$((${#ARR[@]}-2))]}
10
+
11
+ if [ -n "${CONTAINER_NAME}" ] && [ "${CONTAINER_STATUS}" = "Up" ]; then
12
+ echo "Attaching to running container ${CONTAINER_NAME}..."
13
+ docker attach ${CONTAINER_NAME}
14
+ else
15
+ echo "No running container for service '${SERVICE_NAME}'"
16
+ fi
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # This script is used in the development environment with Docker to check if the
4
+ # app database exists, and runs the database setup if it doesn't, as it is the
5
+ # case when the project runs for the first time on the development machine.
6
+ #
7
+ # We are using this custom script instead of running the
8
+ # `rake db:version || rake db:setup` commands, as that currently leaves a
9
+ # couple of small ruby zombie processes running in the app container:
10
+ require "rubygems"
11
+ require "rake"
12
+ require "bundler"
13
+
14
+ Bundler.setup(:default)
15
+
16
+ require "active_record"
17
+
18
+ exit begin
19
+ connection_tries ||= 3
20
+ ActiveRecord::Base.establish_connection && ActiveRecord::Migrator.current_version
21
+ 0
22
+ rescue PG::ConnectionBad
23
+ unless (connection_tries -= 1).zero?
24
+ puts "Retrying DB connection #{connection_tries} more times..."
25
+ sleep ENV.fetch("APP_SETUP_WAIT", "5").to_i
26
+ retry
27
+ end
28
+ 1
29
+ rescue ActiveRecord::NoDatabaseError
30
+
31
+ include ActiveRecord::Tasks
32
+
33
+ DatabaseTasks.root = File.expand_path "../..", __FILE__
34
+ DatabaseTasks.db_dir = File.join DatabaseTasks.root, "db"
35
+ DatabaseTasks.env = ENV.fetch "ENV", ENV.fetch("RAILS_ENV", "development")
36
+
37
+ # Add model dirs to the autoload_paths for the seeder to run smoothly:
38
+ ActiveSupport::Dependencies.autoload_paths << File.join(DatabaseTasks.root, "app", "models", "concerns")
39
+ ActiveSupport::Dependencies.autoload_paths << File.join(DatabaseTasks.root, "app", "models")
40
+
41
+ return 2 unless DatabaseTasks.create_current
42
+ return 3 unless DatabaseTasks.load_schema_current
43
+ 0
44
+ ensure
45
+ ActiveRecord::Base.clear_all_connections!
46
+ end
@@ -0,0 +1,53 @@
1
+ #! /bin/bash
2
+
3
+ # The Docker App Container's development entrypoint.
4
+ # This is a script used by the project's Docker development environment to
5
+ # setup the app containers and databases upon runnning.
6
+ set -e
7
+
8
+ : ${APP_PATH:="/usr/src/app"}
9
+ : ${APP_TEMP_PATH:="$APP_PATH/tmp"}
10
+ : ${APP_SETUP_LOCK:="$APP_TEMP_PATH/setup.lock"}
11
+ : ${APP_SETUP_WAIT:="5"}
12
+
13
+ # 1: Define the functions lock and unlock our app containers setup processes:
14
+ function lock_setup { mkdir -p $APP_TEMP_PATH && touch $APP_SETUP_LOCK; }
15
+ function unlock_setup { rm -rf $APP_SETUP_LOCK; }
16
+ function wait_setup { echo "Waiting for app setup to finish..."; sleep $APP_SETUP_WAIT; }
17
+
18
+ # 2: 'Unlock' the setup process if the script exits prematurely:
19
+ trap unlock_setup HUP INT QUIT KILL TERM EXIT
20
+
21
+ # 3: Wait until the setup 'lock' file no longer exists:
22
+ while [ -f $APP_SETUP_LOCK ]; do wait_setup; done
23
+
24
+ # 4: 'Lock' the setup process, to prevent a race condition when the project's
25
+ # app containers will try to install gems and setup the database concurrently:
26
+ lock_setup
27
+
28
+ # 5: Check or install the app dependencies via Bundler:
29
+ bundle check || bundle
30
+
31
+ # 6: Check if the database exists, or setup the database if it doesn't, as it is
32
+ # the case when the project runs for the first time.
33
+ #
34
+ # We'll use a custom script `check-or-setup-db` (inside our app's `bin` folder),
35
+ # instead of running `rake db:version || rake db:setup`, as running that command
36
+ # (at least on rails 4.2.4) will leave a couple of small ruby zombie processes
37
+ # running in the container:
38
+ check_or_setup_db
39
+
40
+ # 7: 'Unlock' the setup process:
41
+ unlock_setup
42
+
43
+ # 8: Specify a default command, in case it wasn't issued:
44
+ if [ -z "$1" ]; then set -- rails server -p 3000 -b 0.0.0.0 "$@"; fi
45
+
46
+ # 9: If the command to execute is 'rails server', then force it to write the
47
+ # pid file into a non-shared container directory. Suddenly killing and removing
48
+ # app containers without this would leave a pidfile in the project's tmp dir,
49
+ # preventing the app container from starting up on further attempts:
50
+ if [[ "$1" = "rails" && ("$2" = "s" || "$2" = "server") ]]; then set -- "$@" -P /tmp/server.pid; fi
51
+
52
+ # 10: Execute the given or default command:
53
+ exec "$@"
@@ -0,0 +1,84 @@
1
+ version: '2'
2
+
3
+ volumes:
4
+ postgres-data:
5
+ driver: local
6
+ gems:
7
+ driver: local
8
+
9
+ services:
10
+ db:
11
+ image: postgres:9.5.1
12
+ ports:
13
+ # We'll bind our host's port 5432 to postgres's port 5432, so we can use
14
+ # our database IDEs with it:
15
+ - 5432:5432
16
+ volumes:
17
+ # We'll store the postgres data in the 'postgres-data' volume we defined:
18
+ - postgres-data:/var/lib/postgresql/data
19
+ - ./db/dumps:/db/dumps:ro # Mount the DB dumps folder
20
+ - ./bin/restoredb:/bin/restoredb:ro # Mount the 'restoredb' script
21
+ environment:
22
+ POSTGRES_PASSWORD: P4Ssw0rD!
23
+
24
+ # The job processor container - we'll use this as a base for the rest of the
25
+ # containers:
26
+ web: &app
27
+ image: ruby:2.2.5
28
+ command: rails server -b 0.0.0.0 -p 3000 -P /tmp/rails.pid
29
+ ports:
30
+ - 3000:3000
31
+ entrypoint: /usr/src/app/dev-entrypoint
32
+ volumes:
33
+ # Mount our app code directory (".") into our app containers at the
34
+ # "/usr/src/app" folder:
35
+ - .:/usr/src/app
36
+
37
+ # Mount the 'gems' volume on the folder that stores bundled gems:
38
+ - gems:/usr/local/bundle
39
+
40
+ # Specify the directory from where all commands sent to the container will be
41
+ # issued to where the code is mounted:
42
+ working_dir: /usr/src/app
43
+
44
+ # Keep the stdin open, so we can attach to our app container's process
45
+ # and do things such as byebug, etc:
46
+ stdin_open: true
47
+
48
+ # Enable sending signals (CTRL+C, CTRL+P + CTRL+Q) into the container:
49
+ tty: true
50
+
51
+ # Link to our postgres and redis containers, so they can be visible from our
52
+ # app containers:
53
+ links:
54
+ # We'll include a link to the 'db' (postgres) container, making it
55
+ # visible from the container using the 'db' hostname:
56
+ - db
57
+
58
+ # Specify environment variables available for our app containers. We'll leave
59
+ # a YML anchor in case we need to override or add more variables if needed on
60
+ # each app container:
61
+ environment: &app_environment
62
+
63
+ # We'll overwrite the PATH environment variable to include the 'bin/'
64
+ # directory, for the entrypoint script to find the app's executables:
65
+ PATH: /usr/src/app/bin:/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
66
+
67
+ # We'll set the DATABASE_URL environment variable for the app to connect
68
+ # to our postgres container - no need to use a 'config/database.yml' file.
69
+ DATABASE_URL: postgres://postgres:P4Ssw0rD!@db:5432/<%= app_name.downcase.underscore %>_dev?pool=25&encoding=unicode&schema_search_path=public,partitioning
70
+
71
+ # We'll set the RAILS_ENV and RACK_ENV environment variables to
72
+ # 'development', so our app containers will start in 'development' mode
73
+ # on this compose project:
74
+ RAILS_ENV: development
75
+ RACK_ENV: development
76
+
77
+ # We'll specify a dotenv file for docker-compose to load more environment
78
+ # variables into our app containers. This dotenv file would normally contain
79
+ # sensitive data (API keys & secrets, etc) which SHOULD NOT be committed into
80
+ # Git.
81
+ # Keep in mind that any changes in this file will require a container restart
82
+ # in order to be available on the app containers:
83
+ env_file:
84
+ - dev.env
@@ -0,0 +1,15 @@
1
+ #! /bin/bash
2
+
3
+ # For use on the postgres container only.
4
+ # Usage:
5
+ # bin/restoredb <%= app_name.downcase.underscore %>_dev db/dumps/<your-dump-name>
6
+ set -e
7
+
8
+ : ${DB_NAME:=$1}
9
+ : ${DB_DUMP_PATH:=$2}
10
+
11
+ dropdb -U postgres -e --if-exists $1 && \
12
+ createdb -U postgres $1 && \
13
+ pg_restore -U postgres --dbname=$1 \
14
+ --clean --no-owner --no-privileges --verbose --jobs=2 \
15
+ $2
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: platter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Icalia Labs
@@ -9,65 +9,65 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-31 00:00:00.000000000 Z
12
+ date: 2016-07-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ~>
19
19
  - !ruby/object:Gem::Version
20
20
  version: '1.7'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ~>
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.7'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ~>
33
33
  - !ruby/object:Gem::Version
34
34
  version: '10.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ~>
40
40
  - !ruby/object:Gem::Version
41
41
  version: '10.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rails
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '='
46
+ - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: 4.2.1
48
+ version: '4.2'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '='
53
+ - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 4.2.1
55
+ version: '4.2'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: thor
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - '>='
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
67
+ - - '>='
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
- description: " A solution to create custom Rails apps used at @icalialabs "
70
+ description: ' A solution to create custom Rails apps used at @icalialabs '
71
71
  email:
72
72
  - kurenn@icalialabs.com
73
73
  executables:
@@ -75,7 +75,7 @@ executables:
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - ".gitignore"
78
+ - .gitignore
79
79
  - CODE_OF_CONDUCT.md
80
80
  - Gemfile
81
81
  - LICENSE.txt
@@ -91,11 +91,16 @@ files:
91
91
  - templates/Procfile
92
92
  - templates/README.md.erb
93
93
  - templates/api_routes.erb
94
+ - templates/attach.erb
94
95
  - templates/base_api_controller.erb
95
96
  - templates/bin_development_setup.rb
97
+ - templates/check_or_setup_db.erb
98
+ - templates/dev-entrypoint.sh
99
+ - templates/docker-compose.yml.erb
96
100
  - templates/mailer_initializer_config.erb
97
101
  - templates/platter_gitignore
98
102
  - templates/production_env.erb
103
+ - templates/restoredb.erb
99
104
  - templates/rspec_support_database_cleaner.erb
100
105
  - templates/rspec_support_factory_girl.erb
101
106
  - templates/rspec_support_i18n.erb
@@ -109,17 +114,17 @@ require_paths:
109
114
  - lib
110
115
  required_ruby_version: !ruby/object:Gem::Requirement
111
116
  requirements:
112
- - - ">="
117
+ - - '>='
113
118
  - !ruby/object:Gem::Version
114
- version: 2.2.3
119
+ version: 2.2.5
115
120
  required_rubygems_version: !ruby/object:Gem::Requirement
116
121
  requirements:
117
- - - ">="
122
+ - - '>='
118
123
  - !ruby/object:Gem::Version
119
124
  version: '0'
120
125
  requirements: []
121
126
  rubyforge_project:
122
- rubygems_version: 2.4.8
127
+ rubygems_version: 2.6.6
123
128
  signing_key:
124
129
  specification_version: 4
125
130
  summary: A solution to create custom Rails apps used at @icalialabs