kowl 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +7 -0
- data/README.md +383 -0
- data/bin/console +14 -0
- data/bin/kowl +106 -0
- data/bin/setup +13 -0
- data/lib/kowl/actions.rb +240 -0
- data/lib/kowl/docker.rb +447 -0
- data/lib/kowl/generators/README.md +5 -0
- data/lib/kowl/generators/action_generator.rb +113 -0
- data/lib/kowl/generators/admin_generator.rb +114 -0
- data/lib/kowl/generators/assets_generator.rb +188 -0
- data/lib/kowl/generators/base.rb +40 -0
- data/lib/kowl/generators/circleci_generator.rb +11 -0
- data/lib/kowl/generators/config_generator.rb +180 -0
- data/lib/kowl/generators/controller_generator.rb +64 -0
- data/lib/kowl/generators/database_generator.rb +42 -0
- data/lib/kowl/generators/decorators_generator.rb +16 -0
- data/lib/kowl/generators/docker_generator.rb +40 -0
- data/lib/kowl/generators/dotfiles_generator.rb +73 -0
- data/lib/kowl/generators/libs_generator.rb +19 -0
- data/lib/kowl/generators/mailer_generator.rb +58 -0
- data/lib/kowl/generators/misc_generator.rb +20 -0
- data/lib/kowl/generators/overrides/app_base.rb +15 -0
- data/lib/kowl/generators/overrides/app_builder.rb +58 -0
- data/lib/kowl/generators/overrides/app_generator.rb +249 -0
- data/lib/kowl/generators/pages_generator.rb +46 -0
- data/lib/kowl/generators/routes_generator.rb +20 -0
- data/lib/kowl/generators/sidekiq_generator.rb +31 -0
- data/lib/kowl/generators/staging_generator.rb +14 -0
- data/lib/kowl/generators/test_generator.rb +42 -0
- data/lib/kowl/generators/text_files_generator.rb +41 -0
- data/lib/kowl/generators/users_and_auth_generator.rb +143 -0
- data/lib/kowl/generators/uuid_generator.rb +39 -0
- data/lib/kowl/generators/views_and_helpers_generator.rb +104 -0
- data/lib/kowl/geodb.rb +96 -0
- data/lib/kowl/helpers.rb +139 -0
- data/lib/kowl/templates/Gemfile.erb.tt +253 -0
- data/lib/kowl/templates/README.md.erb +33 -0
- data/lib/kowl/templates/app/assets/javascripts/semantic.js.tt +26 -0
- data/lib/kowl/templates/app/assets/stylesheets/administrate/application.scss +44 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/_custom_styling.scss +38 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/application-mailer.scss +1 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/application.scss +14 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/components/_alerts.scss +7 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/components/_errors.scss +28 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/components/_navbar.scss +17 -0
- data/lib/kowl/templates/app/assets/stylesheets/bootstrap/variables.scss +6 -0
- data/lib/kowl/templates/app/assets/stylesheets/semantic/_custom_styling.scss +20 -0
- data/lib/kowl/templates/app/assets/stylesheets/semantic/application.scss +24 -0
- data/lib/kowl/templates/app/controllers/admin/application_controller.rb +29 -0
- data/lib/kowl/templates/app/controllers/admin/login_activities_controller.rb +29 -0
- data/lib/kowl/templates/app/controllers/admin/users_controller.rb +37 -0
- data/lib/kowl/templates/app/controllers/concerns/auth/authentication.rb +18 -0
- data/lib/kowl/templates/app/controllers/concerns/auth/authorization.rb +20 -0
- data/lib/kowl/templates/app/controllers/concerns/auth/error_handlers.rb +27 -0
- data/lib/kowl/templates/app/controllers/concerns/noauth/error_handlers.rb +25 -0
- data/lib/kowl/templates/app/controllers/users_controller.rb +17 -0
- data/lib/kowl/templates/app/dashboards/login_activity_dashboard.rb.tt +59 -0
- data/lib/kowl/templates/app/dashboards/rich_text_body_dashboard.rb.tt +17 -0
- data/lib/kowl/templates/app/dashboards/user_dashboard.rb.tt +60 -0
- data/lib/kowl/templates/app/fields/gravatar_field.rb +10 -0
- data/lib/kowl/templates/app/fields/rich_text_area_field.rb +8 -0
- data/lib/kowl/templates/app/inputs/rich_text_area_input.rb +11 -0
- data/lib/kowl/templates/app/javascript/administrate/components/date_time_picker.js.tt +32 -0
- data/lib/kowl/templates/app/javascript/administrate/components/table.js.tt +49 -0
- data/lib/kowl/templates/app/javascript/administrate/index.js +3 -0
- data/lib/kowl/templates/app/javascript/packs/administrate.js.tt +21 -0
- data/lib/kowl/templates/app/javascript/packs/semantic.js +11 -0
- data/lib/kowl/templates/app/mailers/application_mailer.rb +7 -0
- data/lib/kowl/templates/app/mailers/devise_mailer.rb +5 -0
- data/lib/kowl/templates/app/models/login_activity.rb.tt +29 -0
- data/lib/kowl/templates/app/models/user.rb.tt +72 -0
- data/lib/kowl/templates/app/policies/application_policy.rb +38 -0
- data/lib/kowl/templates/app/policies/login_activity_policy.rb +35 -0
- data/lib/kowl/templates/app/policies/user_policy.rb +43 -0
- data/lib/kowl/templates/app/views/admin/templates/navigation.erb.tt +23 -0
- data/lib/kowl/templates/app/views/admin/views/application/_javascript.html.erb +21 -0
- data/lib/kowl/templates/app/views/admin/views/users/_collection.html.erb +102 -0
- data/lib/kowl/templates/app/views/admin/views/users/_form.html.erb +46 -0
- data/lib/kowl/templates/app/views/admin/views/users/edit.html.erb +36 -0
- data/lib/kowl/templates/app/views/admin/views/users/index.html.erb +66 -0
- data/lib/kowl/templates/app/views/fields/gravatar_field/_form.html.erb +6 -0
- data/lib/kowl/templates/app/views/fields/gravatar_field/_index.html.erb +1 -0
- data/lib/kowl/templates/app/views/fields/gravatar_field/_show.html.erb +1 -0
- data/lib/kowl/templates/app/views/fields/rich_text_area_field/_form.html.erb +6 -0
- data/lib/kowl/templates/app/views/fields/rich_text_area_field/_index.html.erb +1 -0
- data/lib/kowl/templates/app/views/fields/rich_text_area_field/_show.html.erb +1 -0
- data/lib/kowl/templates/app/views/layouts/admin.html.erb.tt +47 -0
- data/lib/kowl/templates/app/views/layouts/devise_mailer.html.erb +14 -0
- data/lib/kowl/templates/app/views/pages/welcome/bootstrap.html.erb +18 -0
- data/lib/kowl/templates/app/views/pages/welcome/bootstrap.html.haml +17 -0
- data/lib/kowl/templates/app/views/pages/welcome/bootstrap.html.slim +17 -0
- data/lib/kowl/templates/app/views/pages/welcome/default.html.erb +0 -0
- data/lib/kowl/templates/app/views/pages/welcome/default.html.haml +0 -0
- data/lib/kowl/templates/app/views/pages/welcome/default.html.slim +0 -0
- data/lib/kowl/templates/app/views/pages/welcome/semantic.html.erb +20 -0
- data/lib/kowl/templates/app/views/pages/welcome/semantic.html.haml +17 -0
- data/lib/kowl/templates/app/views/pages/welcome/semantic.html.slim +17 -0
- data/lib/kowl/templates/app/views/shared/footer/bootstrap.html.erb.tt +5 -0
- data/lib/kowl/templates/app/views/shared/footer/bootstrap.html.haml.tt +3 -0
- data/lib/kowl/templates/app/views/shared/footer/bootstrap.html.slim.tt +3 -0
- data/lib/kowl/templates/app/views/shared/footer/semantic.html.erb.tt +7 -0
- data/lib/kowl/templates/app/views/shared/footer/semantic.html.haml.tt +5 -0
- data/lib/kowl/templates/app/views/shared/footer/semantic.html.slim.tt +5 -0
- data/lib/kowl/templates/app/views/shared/navigation/bootstrap.html.erb.tt +51 -0
- data/lib/kowl/templates/app/views/shared/navigation/bootstrap.html.haml.tt +36 -0
- data/lib/kowl/templates/app/views/shared/navigation/bootstrap.html.slim.tt +36 -0
- data/lib/kowl/templates/app/views/shared/navigation/semantic.html.erb.tt +48 -0
- data/lib/kowl/templates/app/views/shared/navigation/semantic.html.haml.tt +36 -0
- data/lib/kowl/templates/app/views/shared/navigation/semantic.html.slim.tt +36 -0
- data/lib/kowl/templates/app/workers/scheduler/pghero_scheduler.rb +11 -0
- data/lib/kowl/templates/config/autoprefixer.yml +4 -0
- data/lib/kowl/templates/config/db/mysql.yml.tt +43 -0
- data/lib/kowl/templates/config/db/oracle.yml.tt +29 -0
- data/lib/kowl/templates/config/db/postgresql.yml.tt +37 -0
- data/lib/kowl/templates/config/db/sqlite3.yml.tt +20 -0
- data/lib/kowl/templates/config/db/sqlserver.yml.tt +28 -0
- data/lib/kowl/templates/config/initializers/administrate.rb.tt +9 -0
- data/lib/kowl/templates/config/initializers/bullet.rb +21 -0
- data/lib/kowl/templates/config/initializers/devise-security.rb +44 -0
- data/lib/kowl/templates/config/initializers/devise_argon2.rb +29 -0
- data/lib/kowl/templates/config/initializers/faker.rb +6 -0
- data/lib/kowl/templates/config/initializers/generators.rb.tt +31 -0
- data/lib/kowl/templates/config/initializers/geocoder.rb +10 -0
- data/lib/kowl/templates/config/initializers/letter_opener.rb +13 -0
- data/lib/kowl/templates/config/initializers/lockbox.rb +11 -0
- data/lib/kowl/templates/config/initializers/logging.rb +6 -0
- data/lib/kowl/templates/config/initializers/lograge.rb +7 -0
- data/lib/kowl/templates/config/initializers/logstop.rb +4 -0
- data/lib/kowl/templates/config/initializers/middleware.rb +9 -0
- data/lib/kowl/templates/config/initializers/oj.rb +7 -0
- data/lib/kowl/templates/config/initializers/pagy.rb.tt +16 -0
- data/lib/kowl/templates/config/initializers/postmark.rb +8 -0
- data/lib/kowl/templates/config/initializers/rack_attack.rb.tt +71 -0
- data/lib/kowl/templates/config/initializers/sass.rb +5 -0
- data/lib/kowl/templates/config/initializers/sidekiq.rb +11 -0
- data/lib/kowl/templates/config/initializers/simpleform/semantic.rb +225 -0
- data/lib/kowl/templates/config/initializers/slim.rb +6 -0
- data/lib/kowl/templates/config/initializers/sparkpost.rb +13 -0
- data/lib/kowl/templates/config/routes.rb.tt +28 -0
- data/lib/kowl/templates/config/sidekiq.yml.tt +17 -0
- data/lib/kowl/templates/db/migrations/create_action_text_tables.action_text.rb.tt +16 -0
- data/lib/kowl/templates/db/migrations/create_active_storage_tables.active_storage.rb.tt +29 -0
- data/lib/kowl/templates/db/migrations/devise.rb.tt +59 -0
- data/lib/kowl/templates/db/migrations/login_activities.rb.tt +41 -0
- data/lib/kowl/templates/db/seeds.rb.tt +14 -0
- data/lib/kowl/templates/docker/Dockerfile.alpine.tt +92 -0
- data/lib/kowl/templates/docker/Dockerfile.debian.tt +133 -0
- data/lib/kowl/templates/docker/docker-compose.yml.tt +55 -0
- data/lib/kowl/templates/docker/mysql/Dockerfile.tt +15 -0
- data/lib/kowl/templates/dotfiles/Aptfile.tt +34 -0
- data/lib/kowl/templates/dotfiles/Brewfile.tt +49 -0
- data/lib/kowl/templates/dotfiles/Procfile.tt +12 -0
- data/lib/kowl/templates/dotfiles/codeclimate.yml +76 -0
- data/lib/kowl/templates/dotfiles/coffeelint.json +10 -0
- data/lib/kowl/templates/dotfiles/coffeelintignore +15 -0
- data/lib/kowl/templates/dotfiles/dockerignore +23 -0
- data/lib/kowl/templates/dotfiles/editorconfig +13 -0
- data/lib/kowl/templates/dotfiles/env.tt +58 -0
- data/lib/kowl/templates/dotfiles/erb-lint.yml +10 -0
- data/lib/kowl/templates/dotfiles/erdconfig.tt +24 -0
- data/lib/kowl/templates/dotfiles/eslintignore +20 -0
- data/lib/kowl/templates/dotfiles/eslintrc.js +31 -0
- data/lib/kowl/templates/dotfiles/fasterer.yml +14 -0
- data/lib/kowl/templates/dotfiles/foreman +1 -0
- data/lib/kowl/templates/dotfiles/gitattributes +15 -0
- data/lib/kowl/templates/dotfiles/gitignore +69 -0
- data/lib/kowl/templates/dotfiles/haml-lint.yml +23 -0
- data/lib/kowl/templates/dotfiles/jsbeautifyrc +15 -0
- data/lib/kowl/templates/dotfiles/jshintrc +3 -0
- data/lib/kowl/templates/dotfiles/mailmap +3 -0
- data/lib/kowl/templates/dotfiles/nvmrc +1 -0
- data/lib/kowl/templates/dotfiles/prettierignore +21 -0
- data/lib/kowl/templates/dotfiles/prettierrc.js +62 -0
- data/lib/kowl/templates/dotfiles/pryrc +7 -0
- data/lib/kowl/templates/dotfiles/rspec +3 -0
- data/lib/kowl/templates/dotfiles/rubocop.yml.tt +78 -0
- data/lib/kowl/templates/dotfiles/scss-lint.yml +132 -0
- data/lib/kowl/templates/dotfiles/simplecov +19 -0
- data/lib/kowl/templates/dotfiles/slim-lint.yml +23 -0
- data/lib/kowl/templates/dotfiles/slugignore +10 -0
- data/lib/kowl/templates/dotfiles/yamllint +7 -0
- data/lib/kowl/templates/dotfiles/yarnclean +46 -0
- data/lib/kowl/templates/lib/tasks/stats.rake +42 -0
- data/lib/kowl/templates/tests/factories/README.md +0 -0
- data/lib/kowl/templates/tests/factories/login_activity.rb +11 -0
- data/lib/kowl/templates/tests/factories/user.rb +11 -0
- data/lib/kowl/templates/tests/minitest/README.md +3 -0
- data/lib/kowl/templates/tests/minitest/application_system_test_case.rb +7 -0
- data/lib/kowl/templates/tests/minitest/controllers/pages_controller_test.rb +10 -0
- data/lib/kowl/templates/tests/minitest/models/login_activity_test.rb +8 -0
- data/lib/kowl/templates/tests/minitest/models/user_test.rb +15 -0
- data/lib/kowl/templates/tests/minitest/policies/login_activity_policy_test.rb +7 -0
- data/lib/kowl/templates/tests/minitest/policies/user_policy_test.rb +7 -0
- data/lib/kowl/templates/tests/minitest/support/capybara.rb +38 -0
- data/lib/kowl/templates/tests/minitest/support/database_cleaner.rb +20 -0
- data/lib/kowl/templates/tests/minitest/support/database_cleaner_support.rb +15 -0
- data/lib/kowl/templates/tests/minitest/support/deferred_garbage_collection.rb +21 -0
- data/lib/kowl/templates/tests/minitest/support/devise.rb +16 -0
- data/lib/kowl/templates/tests/minitest/support/factories.rb +6 -0
- data/lib/kowl/templates/tests/minitest/support/formulaic.rb +8 -0
- data/lib/kowl/templates/tests/minitest/support/helpers/devise_helper.rb +57 -0
- data/lib/kowl/templates/tests/minitest/support/papertrail.rb +17 -0
- data/lib/kowl/templates/tests/minitest/support/pundit.rb +0 -0
- data/lib/kowl/templates/tests/minitest/support/shoulda.rb +11 -0
- data/lib/kowl/templates/tests/minitest/support/simplecov.rb +8 -0
- data/lib/kowl/templates/tests/minitest/test_helper.rb +17 -0
- data/lib/kowl/templates/tests/rspec/README.md +9 -0
- data/lib/kowl/templates/tests/rspec/controllers/admin/application_controller_spec.rb +12 -0
- data/lib/kowl/templates/tests/rspec/controllers/admin/users_controller_spec.rb +14 -0
- data/lib/kowl/templates/tests/rspec/controllers/pages_controller_spec.rb +10 -0
- data/lib/kowl/templates/tests/rspec/features/README.md +15 -0
- data/lib/kowl/templates/tests/rspec/features/visitor_sign_up_spec.rb +25 -0
- data/lib/kowl/templates/tests/rspec/helpers/application_helper_spec.rb +7 -0
- data/lib/kowl/templates/tests/rspec/helpers/pages_helper_spec.rb +15 -0
- data/lib/kowl/templates/tests/rspec/models/login_activity_spec.rb +11 -0
- data/lib/kowl/templates/tests/rspec/models/user_spec.rb +21 -0
- data/lib/kowl/templates/tests/rspec/policies/login_activity_policy_spec.rb +59 -0
- data/lib/kowl/templates/tests/rspec/policies/user_policy_spec.rb +56 -0
- data/lib/kowl/templates/tests/rspec/rails_helper.rb +72 -0
- data/lib/kowl/templates/tests/rspec/requests/pages_spec.rb +11 -0
- data/lib/kowl/templates/tests/rspec/spec_helper.rb +96 -0
- data/lib/kowl/templates/tests/rspec/support/bullet.rb +17 -0
- data/lib/kowl/templates/tests/rspec/support/capybara.rb +37 -0
- data/lib/kowl/templates/tests/rspec/support/controller_testing.rb +10 -0
- data/lib/kowl/templates/tests/rspec/support/database_cleaner.rb +55 -0
- data/lib/kowl/templates/tests/rspec/support/deferred_garbage_collection.rb +32 -0
- data/lib/kowl/templates/tests/rspec/support/devise.rb +21 -0
- data/lib/kowl/templates/tests/rspec/support/factories.rb +5 -0
- data/lib/kowl/templates/tests/rspec/support/formulaic.rb +8 -0
- data/lib/kowl/templates/tests/rspec/support/helpers/devise_helpers.rb +56 -0
- data/lib/kowl/templates/tests/rspec/support/papertrail.rb +5 -0
- data/lib/kowl/templates/tests/rspec/support/pi_ci.rb +6 -0
- data/lib/kowl/templates/tests/rspec/support/pundit.rb +6 -0
- data/lib/kowl/templates/tests/rspec/support/shoulda.rb +10 -0
- data/lib/kowl/templates/tests/rspec/support/sidekiq.rb +10 -0
- data/lib/kowl/templates/tests/rspec/support/simplecov.rb +7 -0
- data/lib/kowl/templates/tests/rspec/support/warden.rb +8 -0
- data/lib/kowl/templates/text_files/AUTHORS.md +4 -0
- data/lib/kowl/templates/text_files/CHANGELOG.md.tt +12 -0
- data/lib/kowl/templates/text_files/CODE_OF_CONDUCT.md +76 -0
- data/lib/kowl/templates/text_files/TODO.md +7 -0
- data/lib/kowl/templates/text_files/VERSION +1 -0
- data/lib/kowl/templates/text_files/humans.txt.tt +15 -0
- data/lib/kowl/templates/text_files/robots.txt.tt +6 -0
- data/lib/kowl/templates/text_files/security.txt +6 -0
- data/lib/kowl/version.rb +9 -0
- data/lib/kowl.rb +18 -0
- metadata +404 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class CreateLoginActivities < ActiveRecord::Migration[6.0]
|
4
|
+
def change
|
5
|
+
create_table :login_activities do |t|
|
6
|
+
t.string :scope
|
7
|
+
t.string :strategy
|
8
|
+
<%- if options[:encrypt] -%>
|
9
|
+
t.string :identity_ciphertext
|
10
|
+
t.string :identity_bidx
|
11
|
+
<%- else -%>
|
12
|
+
t.string :identity
|
13
|
+
<%- end -%>
|
14
|
+
t.boolean :success
|
15
|
+
t.string :failure_reason
|
16
|
+
t.references :user, polymorphic: true
|
17
|
+
t.string :context
|
18
|
+
<%- if options[:encrypt] -%>
|
19
|
+
t.string :ip_ciphertext
|
20
|
+
t.string :ip_bidx
|
21
|
+
<%- else -%>
|
22
|
+
t.string :ip
|
23
|
+
<%- end -%>
|
24
|
+
t.text :user_agent
|
25
|
+
t.text :referrer
|
26
|
+
t.string :city
|
27
|
+
t.string :region
|
28
|
+
t.string :country
|
29
|
+
t.float :latitude
|
30
|
+
t.float :longitude
|
31
|
+
t.datetime :created_at
|
32
|
+
end
|
33
|
+
|
34
|
+
<%- if options[:encrypt] -%>
|
35
|
+
add_index :login_activities, :identity_bidx
|
36
|
+
add_index :login_activities, :ip_bidx
|
37
|
+
<%- else -%>
|
38
|
+
add_index :login_activities, :ip
|
39
|
+
<%- end -%>
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This file should contain all the record creation needed to seed the database with its default values.
|
4
|
+
# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
|
5
|
+
#
|
6
|
+
# Examples:
|
7
|
+
#
|
8
|
+
# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
|
9
|
+
# Character.create(name: 'Luke', movie: movies.first)
|
10
|
+
<%- unless options[:noauth] -%>
|
11
|
+
User.create!(email: 'test@test.com', password: 'Passw0rd!', password_confirmation: 'Passw0rd!', role: 'superuser', reset_password_token: '<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>', unlock_token: '<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>')
|
12
|
+
User.create!(email: 'test2@test.com', password: 'Pa$$w0rd!', password_confirmation: 'Pa$$w0rd!', role: 'staff', reset_password_token: '<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>', unlock_token: '<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>')
|
13
|
+
User.create!(email: 'test_user@test.com', password: 'P4ssW0rd!', password_confirmation: 'P4ssW0rd!', reset_password_token: '<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>', unlock_token: '<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>')
|
14
|
+
<%- end -%>
|
@@ -0,0 +1,92 @@
|
|
1
|
+
FROM ruby:<%= RUBY_VERSION %>-alpine
|
2
|
+
|
3
|
+
########################################
|
4
|
+
# Set Environment variables
|
5
|
+
########################################
|
6
|
+
# If a RAILS_MASTER_KEY is used to encrypt credentails within the container
|
7
|
+
# ARG RAILS_MASTER_KEY
|
8
|
+
# ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY
|
9
|
+
ARG RAILS_ENV="development"
|
10
|
+
ENV PATH="/usr/sbin:/app/bin:$PATH"
|
11
|
+
<%= dockerfile_database_args unless options[:database] == 'sqlite3' -%>
|
12
|
+
ENV APP_USER='app' \
|
13
|
+
APP_GROUP='app' \
|
14
|
+
APP_HOME='/app' \
|
15
|
+
BUNDLE_PATH="vendor/cache" \
|
16
|
+
BUNDLE_JOBS=4 \
|
17
|
+
BUNDLE_RETRY=3 \
|
18
|
+
RAILS_ENV=$RAILS_ENV \
|
19
|
+
MALLOC_ARENA_MAX=2
|
20
|
+
# MALLOC_ARENA_MAX used to improve memory GC cycle performance
|
21
|
+
# https://github.com/prestodb/presto/issues/8993
|
22
|
+
# https://github.com/heroku/heroku-buildpack-ruby/issues/751
|
23
|
+
# https://www.speedshop.co/2017/12/04/malloc-doubles-ruby-memory.html
|
24
|
+
|
25
|
+
|
26
|
+
# Update all Base OS Packages
|
27
|
+
# => Install build-base and libffi-dev which is required to install various dependencies, gems, etc
|
28
|
+
# => dumb-init is installed to prevent zombie child processes from spawning
|
29
|
+
RUN apk update && apk -U upgrade >/dev/null 2>&1 && \
|
30
|
+
apk add build-base ca-certificates libffi-dev linux-headers openssl >/dev/null 2>&1 && \
|
31
|
+
<%= alpine_docker_dependencies(options) -%>
|
32
|
+
rm -rf /tmp/* /var/tmp/* /var/cache/apk/* && \
|
33
|
+
truncate -s 0 /var/log/*log
|
34
|
+
|
35
|
+
<%- unless options[:database] == 'sqlite3' && options[:skip_sidekiq] -%>
|
36
|
+
# Dockerize is used to prevent the application container from dieing (because other services haven't finished starting yet)
|
37
|
+
# => This is because some of the database containers have an initialization time and will cause your application to fail if it tries to create the application database before mysql has loaded
|
38
|
+
ENV DOCKERIZE_VERSION v0.6.1
|
39
|
+
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \
|
40
|
+
tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \
|
41
|
+
rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz
|
42
|
+
<%- end -%>
|
43
|
+
|
44
|
+
########################################
|
45
|
+
# Disable gem documentation downloading
|
46
|
+
########################################
|
47
|
+
RUN mkdir -p /usr/local/etc \
|
48
|
+
&& { \
|
49
|
+
echo 'gem: --no-document'; \
|
50
|
+
echo 'install: --no-document'; \
|
51
|
+
echo 'update: --no-document'; \
|
52
|
+
} >> /usr/local/etc/gemrc && \
|
53
|
+
echo 'gem: --no-document' >> ~/.gemrc
|
54
|
+
|
55
|
+
########################################
|
56
|
+
# Update and install all default gems
|
57
|
+
# Correct issue with fileutils
|
58
|
+
########################################
|
59
|
+
RUN gem uninstall --all --ignore-dependencies --executables && gem cleanup && \
|
60
|
+
gem update --system --no-document && gem update --no-document && \
|
61
|
+
gem uninstall fileutils; gem update fileutils --default
|
62
|
+
|
63
|
+
########################################
|
64
|
+
# Setup user, application, and directory stuff
|
65
|
+
########################################
|
66
|
+
RUN addgroup -S $APP_GROUP && \
|
67
|
+
adduser -h $APP_HOME -s /bin/bash -D -G $APP_GROUP $APP_USER && \
|
68
|
+
mkdir -p $APP_HOME && \
|
69
|
+
chown -R $APP_USER:$APP_USER $APP_HOME
|
70
|
+
|
71
|
+
########################################
|
72
|
+
# Application / Install gems
|
73
|
+
########################################
|
74
|
+
WORKDIR $APP_HOME
|
75
|
+
COPY . $APP_HOME
|
76
|
+
RUN chown -R $APP_USER:$APP_USER $APP_HOME
|
77
|
+
USER $APP_USER
|
78
|
+
# Install and compile the applications assets
|
79
|
+
RUN bundle config set without 'test' && \
|
80
|
+
bundle config set clean true && \
|
81
|
+
bundle install --jobs ${BUNDLE_JOBS} --retry ${BUNDLE_RETRY} --quiet && \
|
82
|
+
<%- unless options[:skip_javascript] -%>
|
83
|
+
yarn check --silent >/dev/null 2>&1 || yarn install --frozen-lockfile; yarn cache clean && \
|
84
|
+
<%- end -%>
|
85
|
+
rails assets:precompile<%= dockerfile_migration_snip(options[:database]) -%>
|
86
|
+
|
87
|
+
HEALTHCHECK CMD curl --fail "http://$(/bin/hostname -i | /usr/bin/awk '{ print $1 }'):${PORT:-3000}" || exit 1
|
88
|
+
# ########################################
|
89
|
+
# # Dockerfile EntryPoint commands
|
90
|
+
# ########################################
|
91
|
+
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
92
|
+
CMD ["bundle", "exec", "rails", "server", "-p", "3000", "-b", "0.0.0.0"]
|
@@ -0,0 +1,133 @@
|
|
1
|
+
FROM node:12-slim as node
|
2
|
+
FROM ruby:<%= RUBY_VERSION %>-slim
|
3
|
+
|
4
|
+
########################################
|
5
|
+
# Set Environment variables
|
6
|
+
########################################
|
7
|
+
# If a RAILS_MASTER_KEY is used to encrypt credentails within the container
|
8
|
+
# ARG RAILS_MASTER_KEY
|
9
|
+
# ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY
|
10
|
+
ARG RAILS_ENV="development"
|
11
|
+
ENV DEBIAN_FRONTEND noninteractive
|
12
|
+
ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/app/bin:$PATH"
|
13
|
+
<%= dockerfile_database_args unless options[:database] == 'sqlite3' -%>
|
14
|
+
ENV APP_USER='app' \
|
15
|
+
APP_GROUP='app' \
|
16
|
+
APP_HOME='/app' \
|
17
|
+
BUNDLE_PATH="vendor/cache" \
|
18
|
+
BUNDLE_JOBS=4 \
|
19
|
+
BUNDLE_RETRY=3 \
|
20
|
+
RAILS_ENV=$RAILS_ENV \
|
21
|
+
MALLOC_ARENA_MAX=2
|
22
|
+
# MALLOC_ARENA_MAX used to improve memory GC cycle performance
|
23
|
+
# https://github.com/prestodb/presto/issues/8993
|
24
|
+
# https://github.com/heroku/heroku-buildpack-ruby/issues/751
|
25
|
+
# https://www.speedshop.co/2017/12/04/malloc-doubles-ruby-memory.html
|
26
|
+
|
27
|
+
|
28
|
+
########################################
|
29
|
+
# Basic application requirements
|
30
|
+
# => Update all packages before install required packages
|
31
|
+
# => Install essential header libraries
|
32
|
+
########################################
|
33
|
+
RUN apt-get update 2>/dev/null && \
|
34
|
+
apt-get install -qq --no-install-recommends apt-utils 2>/dev/null && \
|
35
|
+
apt-get upgrade -qq && apt-get -qq dist-upgrade 2>/dev/null && \
|
36
|
+
apt-get install -qq build-essential apt-transport-https ca-certificates 2>/dev/null && \
|
37
|
+
<%= debian_docker_dependencies(options) -%>
|
38
|
+
apt-get autoremove -qq && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
|
39
|
+
truncate -s 0 /var/log/*log
|
40
|
+
# ==> Added jemalloc to run Ruby/Rails applications without malloc (to reduce memory consumption and allow faster memory allocation)
|
41
|
+
ENV LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libjemalloc.so'
|
42
|
+
# LD_PRELOAD is where the system can find the Jemalloc library
|
43
|
+
|
44
|
+
<%- unless options[:database] == 'sqlite3' && options[:skip_sidekiq] -%>
|
45
|
+
# Dockerize is used to prevent the application container from dieing (because other services haven't finished starting yet)
|
46
|
+
# => This is because some of the database containers have an initialization time and will cause your application to fail if it tries to create the application database before mysql has loaded
|
47
|
+
ENV DOCKERIZE_VERSION v0.6.1
|
48
|
+
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \
|
49
|
+
tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \
|
50
|
+
rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
|
51
|
+
<%- end -%>
|
52
|
+
|
53
|
+
# Used as an init system to prevent zombie processes as the containers cycle or a process ends
|
54
|
+
ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 /usr/local/bin/dumb-init
|
55
|
+
RUN chmod +x /usr/local/bin/dumb-init
|
56
|
+
|
57
|
+
<%- if %w[oracle sqlserver].include? options[:database] -%>
|
58
|
+
########################################
|
59
|
+
# Databases
|
60
|
+
########################################
|
61
|
+
<%- if options[:database] == 'oracle' %>
|
62
|
+
# https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
|
63
|
+
ENV INSTANT_CLIENT_SHORT_VERSION="19.6"
|
64
|
+
ENV INSTANT_CLIENT_LONG_VERSION="19.6.0.0.0"
|
65
|
+
ENV INSTANT_CLIENT_PATH="$APP_HOME/oracle"
|
66
|
+
ENV PATH="/usr/lib/oracle/$INSTANT_CLIENT_SHORT_VERSION/client64/bin:${PATH}"
|
67
|
+
ENV ORACLE_HOME="/usr/lib/oracle/$INSTANT_CLIENT_SHORT_VERSION/client64" \
|
68
|
+
OCI_LIB="/usr/lib/oracle/$INSTANT_CLIENT_SHORT_VERSION/client64/lib" \
|
69
|
+
TNS_ADMIN="/usr/lib/oracle/$INSTANT_CLIENT_SHORT_VERSION/client64/network/admin" \
|
70
|
+
LD_LIBRARY_PATH="/usr/lib/oracle/$INSTANT_CLIENT_SHORT_VERSION/client64/lib"
|
71
|
+
ENV INSTANT_CLIENT_BASIC_PATH="$INSTANT_CLIENT_PATH/oracle-instantclient$INSTANT_CLIENT_SHORT_VERSION-basic-$INSTANT_CLIENT_LONG_VERSION-1.x86_64.rpm"
|
72
|
+
ENV INSTANT_CLIENT_DEVEL_PATH="$INSTANT_CLIENT_PATH/oracle-instantclient$INSTANT_CLIENT_SHORT_VERSION-devel-$INSTANT_CLIENT_LONG_VERSION-1.x86_64.rpm"
|
73
|
+
ENV INSTANT_CLIENT_SQLPLUS_PATH="$INSTANT_CLIENT_PATH/oracle-instantclient$INSTANT_CLIENT_SHORT_VERSION-sqlplus-$INSTANT_CLIENT_LONG_VERSION-1.x86_64.rpm"
|
74
|
+
# Download required Oracle cli clients and enable them for usage with our application
|
75
|
+
RUN mkdir -p $INSTANT_CLIENT_PATH && \
|
76
|
+
wget -q https://download.oracle.com/otn_software/linux/instantclient/19600/oracle-instantclient$INSTANT_CLIENT_SHORT_VERSION-basic-$INSTANT_CLIENT_LONG_VERSION-1.x86_64.rpm --no-check-certificate -O $INSTANT_CLIENT_BASIC_PATH && \
|
77
|
+
wget -q https://download.oracle.com/otn_software/linux/instantclient/19600/oracle-instantclient$INSTANT_CLIENT_SHORT_VERSION-devel-$INSTANT_CLIENT_LONG_VERSION-1.x86_64.rpm --no-check-certificate -O $INSTANT_CLIENT_DEVEL_PATH && \
|
78
|
+
wget -q https://download.oracle.com/otn_software/linux/instantclient/19600/oracle-instantclient$INSTANT_CLIENT_SHORT_VERSION-sqlplus-$INSTANT_CLIENT_LONG_VERSION-1.x86_64.rpm --no-check-certificate -O $INSTANT_CLIENT_SQLPLUS_PATH && \
|
79
|
+
alien -i $INSTANT_CLIENT_BASIC_PATH 2>/dev/null && \
|
80
|
+
alien -i $INSTANT_CLIENT_DEVEL_PATH 2>/dev/null && \
|
81
|
+
alien -i $INSTANT_CLIENT_SQLPLUS_PATH 2>/dev/null && \
|
82
|
+
ldconfig
|
83
|
+
<%- elsif options[:database] == 'sqlserver' -%>
|
84
|
+
RUN wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.00.27.tar.gz && \
|
85
|
+
tar -xzf freetds-1.00.27.tar.gz && \
|
86
|
+
rm -rf freetds-1.00.27.tar.gz && \
|
87
|
+
cd freetds-1.00.27 && \
|
88
|
+
./configure --prefix=/usr/local --with-tdsver=7.3 --silent >/dev/null 2>&1 && \
|
89
|
+
make -j "$(nproc)" >/dev/null 2>&1 && \
|
90
|
+
make install >/dev/null 2>&1 && \
|
91
|
+
ldconfig
|
92
|
+
<%- end -%>
|
93
|
+
<%- end -%>
|
94
|
+
|
95
|
+
########################################
|
96
|
+
# NODE (required for numerous Rails components, especially compiling webpacker)
|
97
|
+
########################################
|
98
|
+
COPY --from=node /usr/local/bin/node /usr/local/bin/node
|
99
|
+
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
|
100
|
+
COPY --from=node /usr/local/bin/npm /usr/local/bin/npm
|
101
|
+
COPY --from=node /opt/yarn-* /opt/yarn
|
102
|
+
RUN ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn && \
|
103
|
+
ln -s /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg && \
|
104
|
+
mkdir -p /tmp/src /opt
|
105
|
+
ENV PATH="/opt/yarn/bin:${PATH}"
|
106
|
+
|
107
|
+
########################################
|
108
|
+
# APPUSER
|
109
|
+
########################################
|
110
|
+
RUN useradd -m -u 1000 -U $APP_USER && \
|
111
|
+
mkdir -p $APP_HOME && \
|
112
|
+
chown $APP_USER:$APP_USER $APP_HOME && \
|
113
|
+
gem update --no-document && gem update --system --no-document
|
114
|
+
|
115
|
+
########################################
|
116
|
+
# Application / Install gems
|
117
|
+
########################################
|
118
|
+
WORKDIR $APP_HOME
|
119
|
+
COPY . $APP_HOME
|
120
|
+
RUN chown -R $APP_USER:$APP_USER $APP_HOME
|
121
|
+
USER $APP_USER
|
122
|
+
# RUN set -ex && bundle check || bundle install --jobs ${BUNDLE_JOBS} --retry ${BUNDLE_RETRY} --quiet --without test
|
123
|
+
RUN bundle config set without 'test' && \
|
124
|
+
bundle config set clean true && \
|
125
|
+
set -ex && bundle check || bundle install --jobs ${BUNDLE_JOBS} --retry ${BUNDLE_RETRY} --quiet && bundle clean && \
|
126
|
+
<%- unless options[:skip_javascript] -%>
|
127
|
+
bin/yarn install --check-files && \
|
128
|
+
<%- end -%>
|
129
|
+
rails assets:precompile<%= dockerfile_migration_snip(options[:database]) -%>
|
130
|
+
|
131
|
+
HEALTHCHECK CMD curl --fail "http://$(/bin/hostname -i | /usr/bin/awk '{ print $1 }'):${PORT:-3000}" || exit 1
|
132
|
+
ENTRYPOINT ["/usr/local/bin/dumb-init", "--"]
|
133
|
+
CMD ["bundle", "exec", "rails","server", "-p", "3000", "-b", "0.0.0.0"]
|
@@ -0,0 +1,55 @@
|
|
1
|
+
version: '3.7'
|
2
|
+
|
3
|
+
# https://docs.docker.com/compose/compose-file/#extension-fields
|
4
|
+
x-app_base: &x-app_base
|
5
|
+
# tty: true
|
6
|
+
stdin_open: true
|
7
|
+
env_file: .env
|
8
|
+
restart: always
|
9
|
+
networks:
|
10
|
+
- internal_network
|
11
|
+
- external_network
|
12
|
+
environment:
|
13
|
+
<%= docker_variables(options) %>
|
14
|
+
# RAILS_MASTER_KEY: ${RAILS_MASTER_KEY:-<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>}
|
15
|
+
volumes:
|
16
|
+
<%= app_volumes(options[:skip_javascript], 4) %>
|
17
|
+
<%= docker_depends_on(database: options[:database], skip_sidekiq: options[:skip_sidekiq], indention: 4, spaces: 2) -%>
|
18
|
+
|
19
|
+
services:
|
20
|
+
<%- if %w[mysql oracle postgresql sqlserver].include? options[:database] -%>
|
21
|
+
<%= docker_databases(options[:database]) %>
|
22
|
+
<%- end -%>
|
23
|
+
base: &base
|
24
|
+
<<: *x-app_base
|
25
|
+
build:
|
26
|
+
context: .
|
27
|
+
container_name: <%= app_name %>
|
28
|
+
command: >
|
29
|
+
sh -c "rm -rf /app/tmp/pids/server.pid /app/.local >/dev/null 2>&1"
|
30
|
+
|
31
|
+
web:
|
32
|
+
<<: *x-app_base
|
33
|
+
container_name: <%= app_name %>_web
|
34
|
+
image: <%= app_name %>_base:latest
|
35
|
+
command: >
|
36
|
+
sh -c "<%= docker_app_command(options[:database], options[:skip_sidekiq]) -%>"
|
37
|
+
ports:
|
38
|
+
- 3000:3000
|
39
|
+
healthcheck:
|
40
|
+
test: ["CMD", "http", "GET", "localhost:3000"]
|
41
|
+
<%= docker_depends_on(database: options[:database], skip_sidekiq: options[:skip_sidekiq], indention: 6, spaces: 4, requires_base: true) -%>
|
42
|
+
|
43
|
+
<%- unless options[:skip_sidekiq] -%>
|
44
|
+
<%= docker_redis_service %>
|
45
|
+
<%= docker_sidekiq_service(options[:database]) %>
|
46
|
+
<%- end -%>
|
47
|
+
<%= docker_webpacker_service(options) unless options[:skip_javascript] -%>
|
48
|
+
|
49
|
+
networks:
|
50
|
+
external_network:
|
51
|
+
internal_network:
|
52
|
+
internal: true
|
53
|
+
volumes:
|
54
|
+
app:
|
55
|
+
<%= docker_volumes(options) -%>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
FROM mysql:5.7
|
2
|
+
ENV MYSQL_ROOT_PASSWORD="<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>"
|
3
|
+
|
4
|
+
RUN echo "\n"\
|
5
|
+
"CREATE DATABASE IF NOT EXISTS \`<%= app_name %>_development\`;\n"\
|
6
|
+
"CREATE DATABASE IF NOT EXISTS \`<%= app_name %>_production\`;\n"\
|
7
|
+
"CREATE DATABASE IF NOT EXISTS \`<%= app_name %>_staging\`;\n"\
|
8
|
+
"CREATE DATABASE IF NOT EXISTS \`<%= app_name %>_test\`;\n"\
|
9
|
+
"CREATE USER '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASSWORD}';\n"\
|
10
|
+
"GRANT ALL ON \`<%= app_name %>_development\`.* TO '${DB_USER}'@'%';\n"\
|
11
|
+
"GRANT ALL ON \`<%= app_name %>_production\`.* TO '${DB_USER}'@'%';\n"\
|
12
|
+
"GRANT ALL ON \`<%= app_name %>_staging\`.* TO '${DB_USER}'@'%';\n"\
|
13
|
+
"GRANT ALL ON \`<%= app_name %>_test\`.* TO '${DB_USER}'@'%';\n"\
|
14
|
+
"FLUSH PRIVILEGES;"\
|
15
|
+
>> /docker-entrypoint-initdb.d/prepare_rails_db.sql
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Dependencies may vary dependent upon the project
|
2
|
+
apt-transport-https
|
3
|
+
apt-utils
|
4
|
+
build-essential
|
5
|
+
ca-certificates
|
6
|
+
autogen
|
7
|
+
autoconf
|
8
|
+
cmake
|
9
|
+
libtool
|
10
|
+
make
|
11
|
+
curl
|
12
|
+
wget
|
13
|
+
git
|
14
|
+
nodejs
|
15
|
+
yarn
|
16
|
+
graphviz
|
17
|
+
sqlite3
|
18
|
+
libsqlite3-dev
|
19
|
+
libc6-dev
|
20
|
+
libpq-dev
|
21
|
+
libjemalloc-dev
|
22
|
+
# Brotli is used for to compress assets smaller than gzip can (webpacker)
|
23
|
+
brotli
|
24
|
+
<%- if options[:encrypt] %>
|
25
|
+
# https://github.com/crypto-rb/rbnacl/wiki/Installing-libsodium
|
26
|
+
libsodium18
|
27
|
+
<%- end -%>
|
28
|
+
# Used for running background jobs
|
29
|
+
redis-server
|
30
|
+
|
31
|
+
# Image Processing
|
32
|
+
libvips
|
33
|
+
# If you don't want to use vips, you can also use imagemagick
|
34
|
+
# imagemagick
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# Install development dependencies on Mac OS X using Homebrew (http://mxcl.github.com/homebrew)
|
2
|
+
|
3
|
+
# Misc dependencies you should already have (required for building and compiling dependencies)
|
4
|
+
brew 'autogen'
|
5
|
+
brew 'autoconf'
|
6
|
+
brew 'cmake'
|
7
|
+
brew 'libtool'
|
8
|
+
brew 'make'
|
9
|
+
|
10
|
+
# You should already have git installed; ensure that it is the latest version
|
11
|
+
brew 'git'
|
12
|
+
|
13
|
+
# To improve Ruby memory allocation performance
|
14
|
+
brew 'jemalloc'
|
15
|
+
|
16
|
+
# Used for assets and stuff
|
17
|
+
brew 'node'
|
18
|
+
brew 'yarn'
|
19
|
+
# If you plan to use sidekiq or run any background jobs
|
20
|
+
# brew 'redis'
|
21
|
+
cask 'chromedriver'
|
22
|
+
|
23
|
+
<%- unless options[:skip_erd] -%>
|
24
|
+
# Used generate the applications database ERD
|
25
|
+
brew 'graphviz'
|
26
|
+
<%- end -%>
|
27
|
+
|
28
|
+
# For processing images with ActionText/ActiveStorage, sidekiq, etc.
|
29
|
+
brew 'vips'
|
30
|
+
# If you want to use imagemagick instead
|
31
|
+
brew 'imagemagick'
|
32
|
+
|
33
|
+
<%- if options[:encrypt] -%>
|
34
|
+
# Used to encrypt Personal Identifiable information in the database (GDPR Compliance)
|
35
|
+
brew 'libsodium'
|
36
|
+
<%- end -%>
|
37
|
+
|
38
|
+
# Database clients
|
39
|
+
<%- case options[:database] -%>
|
40
|
+
<%- when 'oracle' -%>
|
41
|
+
brew 'instantclient-basic'
|
42
|
+
brew 'instantclient-sdk'
|
43
|
+
<%- when 'sqlserver' -%>
|
44
|
+
brew 'freetds'
|
45
|
+
<%- when 'postgresql' -%>
|
46
|
+
brew 'postgresql'
|
47
|
+
<%- else -%>
|
48
|
+
<%- end -%>
|
49
|
+
brew 'sqlite'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
web: env bundle exec rails s -u puma -b 0.0.0.0 -p 3000
|
2
|
+
<%- unless options[:skip_sidekiq] -%>
|
3
|
+
# If background jobs are required
|
4
|
+
# redis: redis-server /usr/local/etc/redis.conf
|
5
|
+
<%- if config[:env] == 'development' -%>
|
6
|
+
redis: redis-server --port 6379
|
7
|
+
<%- end -%>
|
8
|
+
sidekiq: env bundle exec sidekiq -C ./config/sidekiq.yml
|
9
|
+
<%- end -%>
|
10
|
+
<%- if !options[:skip_javascript] && (config[:env] == 'development') -%>
|
11
|
+
webpack: WEBPACKER_DEV_SERVER_HOST=0.0.0.0 bundle exec ./bin/webpack-dev-server
|
12
|
+
<%- end -%>
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# https://docs.codeclimate.com/docs/
|
2
|
+
version: "2"
|
3
|
+
checks:
|
4
|
+
argument-count:
|
5
|
+
enabled: false
|
6
|
+
complex-logic:
|
7
|
+
enabled: false
|
8
|
+
file-lines:
|
9
|
+
enabled: false
|
10
|
+
method-complexity:
|
11
|
+
enabled: false
|
12
|
+
method-count:
|
13
|
+
enabled: false
|
14
|
+
method-lines:
|
15
|
+
enabled: false
|
16
|
+
nested-control-flow:
|
17
|
+
enabled: false
|
18
|
+
return-statements:
|
19
|
+
enabled: false
|
20
|
+
similar-code:
|
21
|
+
enabled: false
|
22
|
+
identical-code:
|
23
|
+
enabled: false
|
24
|
+
plugins:
|
25
|
+
brakeman:
|
26
|
+
enabled: true
|
27
|
+
bundler-audit:
|
28
|
+
enabled: true
|
29
|
+
coffeelint:
|
30
|
+
enabled: false
|
31
|
+
config: coffeelint.json
|
32
|
+
duplication:
|
33
|
+
enabled: false
|
34
|
+
config:
|
35
|
+
languages:
|
36
|
+
- ruby
|
37
|
+
- javascript
|
38
|
+
exclude_paths:
|
39
|
+
- spec/
|
40
|
+
- test/
|
41
|
+
eslint:
|
42
|
+
enabled: true
|
43
|
+
channel: eslint-4
|
44
|
+
fixme:
|
45
|
+
enabled: true
|
46
|
+
rubocop:
|
47
|
+
enabled: true
|
48
|
+
channel: rubocop-0-81
|
49
|
+
config:
|
50
|
+
file: .rubocop.yml
|
51
|
+
scss-lint:
|
52
|
+
enabled: true
|
53
|
+
exclude_patterns:
|
54
|
+
- .bundle
|
55
|
+
- .idea/
|
56
|
+
- Aptfile
|
57
|
+
- Brewfile
|
58
|
+
- Gemfile
|
59
|
+
- bin/
|
60
|
+
- config/
|
61
|
+
- coverage/
|
62
|
+
- db/
|
63
|
+
- docs/
|
64
|
+
- log/
|
65
|
+
- node_modules/
|
66
|
+
- public/
|
67
|
+
- README.md
|
68
|
+
- script/
|
69
|
+
- spec/
|
70
|
+
- storage/
|
71
|
+
- test/
|
72
|
+
- tmp/
|
73
|
+
- vendor/
|
74
|
+
- vendor/asset
|
75
|
+
- '*.md'
|
76
|
+
- '*.yml'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
.bundle
|
2
|
+
.idea
|
3
|
+
.local
|
4
|
+
.project
|
5
|
+
.vscode
|
6
|
+
.DS_Store
|
7
|
+
bak
|
8
|
+
coverage/
|
9
|
+
db/local_oracle
|
10
|
+
db/*.sqlite3
|
11
|
+
docs
|
12
|
+
log/*
|
13
|
+
public/assets
|
14
|
+
public/packs
|
15
|
+
public/system
|
16
|
+
node_modules
|
17
|
+
storage/
|
18
|
+
tmp/*
|
19
|
+
vendor/bundle
|
20
|
+
vendor/cache
|
21
|
+
**/**.bak
|
22
|
+
*~
|
23
|
+
*.swp
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# EditorConfig is awesome: https://EditorConfig.org
|
2
|
+
|
3
|
+
# top-most EditorConfig file
|
4
|
+
root = true
|
5
|
+
|
6
|
+
# Unix-style newlines with a newline ending every file
|
7
|
+
[*]
|
8
|
+
charset = utf-8
|
9
|
+
end_of_line = lf
|
10
|
+
insert_final_newline = true
|
11
|
+
indent_style = space
|
12
|
+
indent_size = 2
|
13
|
+
trim_trailing_whitespace = true
|
@@ -0,0 +1,58 @@
|
|
1
|
+
########################################
|
2
|
+
# Application Specific
|
3
|
+
########################################
|
4
|
+
<%- if options[:encrypt] -%>
|
5
|
+
LOCKBOX_MASTER_KEY=<%= SecureRandom.hex(32).force_encoding(Encoding::US_ASCII) %>
|
6
|
+
<%- end -%>
|
7
|
+
DISABLE_SPRING=1
|
8
|
+
DB_POOL=5
|
9
|
+
RAILS_ENV=<%= config[:env] != 'docker' ? config[:env] : 'development' %>
|
10
|
+
RAILS_LOG_TO_STDOUT=true
|
11
|
+
# Used by Puma, sidekiq, and caching for number of running threads
|
12
|
+
RAILS_MAX_THREADS=5
|
13
|
+
RAILS_SERVE_STATIC_FILES=true
|
14
|
+
|
15
|
+
<%- if options[:database] != 'sqlite3' -%>
|
16
|
+
########################################
|
17
|
+
# Database Configuration
|
18
|
+
########################################
|
19
|
+
<%= dotfile_databases(options[:database], config[:env]) -%>
|
20
|
+
<%- end -%>
|
21
|
+
|
22
|
+
########################################
|
23
|
+
# Mailer
|
24
|
+
########################################
|
25
|
+
<%- unless options[:skip_mailers] -%>
|
26
|
+
# If redis-server is not running on localhost it needs to be assigned
|
27
|
+
# By default this is set in config/application.rb && config/initializers/sidekiq.rb
|
28
|
+
# => They will fallback to redis://localhost:6379/0 if the ENV variable is not set
|
29
|
+
# => If running through docker-compose this should be set in the compose file
|
30
|
+
# REDIS_URL=redis://localhost:6379/0
|
31
|
+
# Address in which emails will be sent "from"
|
32
|
+
DEFAULT_EMAIL=noreply@example.com
|
33
|
+
<%- if options[:mailer] == 'postmark' -%>
|
34
|
+
POSTMARK_API_TOKEN=<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>
|
35
|
+
<%- else -%>
|
36
|
+
SPARKPOST_API_KEY=<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>
|
37
|
+
<%- end -%>
|
38
|
+
<%- end -%>
|
39
|
+
|
40
|
+
<%- unless options[:skip_javascript] -%>
|
41
|
+
########################################
|
42
|
+
# Javascript/Webpack
|
43
|
+
########################################
|
44
|
+
<%- if %w[staging production].include? config[:env] -%>
|
45
|
+
# Node.js
|
46
|
+
NODE_ENV=production
|
47
|
+
<%- end -%>
|
48
|
+
# So RAILS won't try to compile webpacker assets
|
49
|
+
# WEBPACKER_DEV_SERVER_HOST=webpack
|
50
|
+
WEBPACKER_DEV_SERVER_HOST=0.0.0.0
|
51
|
+
<%- end -%>
|
52
|
+
|
53
|
+
########################################
|
54
|
+
# Analytics and Exception logging
|
55
|
+
########################################
|
56
|
+
# Google analytics
|
57
|
+
# GOOGLE_ANALYTICS=UA-XXXXXXXX-X
|
58
|
+
HONEYBADGER_API_KEY=<%= SecureRandom.hex(16).force_encoding(Encoding::US_ASCII) %>
|