From 7f4371f643f90c72ff70d4b3e2b93c874a966a08 Mon Sep 17 00:00:00 2001 From: Enrico Stano Date: Tue, 30 Jan 2018 19:32:08 +0100 Subject: [PATCH 1/6] Add rbenv support for Capistrano --- Capfile | 1 + Gemfile | 1 + Gemfile.lock | 4 ++++ config/deploy.rb | 2 ++ 4 files changed, 8 insertions(+) diff --git a/Capfile b/Capfile index 6e790a9a0..0f81c1684 100644 --- a/Capfile +++ b/Capfile @@ -16,6 +16,7 @@ require 'capistrano/deploy' # https://github.com/capistrano/passenger # require 'capistrano/rails' +require 'capistrano/rbenv' # Load custom tasks from `lib/capistrano/tasks` if you have any defined Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } diff --git a/Gemfile b/Gemfile index e35652d93..49996f05c 100644 --- a/Gemfile +++ b/Gemfile @@ -46,6 +46,7 @@ group :development do gem 'web-console', '2.1.3' gem 'capistrano', '~> 3.1' gem 'capistrano-rails', '~> 1.1' + gem 'capistrano-rbenv', '~> 2.1' gem 'airbrussh', require: false gem "quiet_assets" gem 'localeapp', '2.1.1', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 5812b2581..4e5301c44 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -93,6 +93,9 @@ GEM capistrano-rails (1.1.5) capistrano (~> 3.1) capistrano-bundler (~> 1.1) + capistrano-rbenv (2.1.3) + capistrano (~> 3.1) + sshkit (~> 1.3) capybara (2.4.4) mime-types (>= 1.16) nokogiri (>= 1.3.3) @@ -382,6 +385,7 @@ DEPENDENCIES byebug capistrano (~> 3.1) capistrano-rails (~> 1.1) + capistrano-rbenv (~> 2.1) capybara (~> 2.4.4) coffee-rails dalli diff --git a/config/deploy.rb b/config/deploy.rb index f7943b663..507e21b09 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -4,6 +4,8 @@ set :application, 'timeoverflow' set :repo_url, 'git@github.com:coopdevs/timeoverflow.git' +set :rbenv_type, :user + # Default branch is :master # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp From 43e8105782e3841d708e0570759a5cdb175b7c48 Mon Sep 17 00:00:00 2001 From: Enrico Stano Date: Tue, 30 Jan 2018 19:32:57 +0100 Subject: [PATCH 2/6] Add staging environment --- config/database.yml | 4 ++ config/deploy/staging.rb | 1 + config/environments/staging.rb | 96 ++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 config/environments/staging.rb diff --git a/config/database.yml b/config/database.yml index 5d48942dd..5ff305bc2 100644 --- a/config/database.yml +++ b/config/database.yml @@ -25,6 +25,10 @@ test: <<: *defaults database: <%= ENV.fetch('DATABASE_NAME', 'timeoverflow_test') %> +staging: + <<: *defaults + database: <%= ENV.fetch('DATABASE_NAME') %> + production: # Set DATABASE_URL environment variable url: <%= ENV['DATABASE_URL'] %> diff --git a/config/deploy/staging.rb b/config/deploy/staging.rb index e69de29bb..59ea3607c 100644 --- a/config/deploy/staging.rb +++ b/config/deploy/staging.rb @@ -0,0 +1 @@ +server 'staging.timeoverflow.org', user: 'timeoverflow', roles: %w(app db web) diff --git a/config/environments/staging.rb b/config/environments/staging.rb new file mode 100644 index 000000000..fe4480f76 --- /dev/null +++ b/config/environments/staging.rb @@ -0,0 +1,96 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = true # false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + config.cache_store = :dalli_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + config.action_mailer.raise_delivery_errors = true + + config.action_mailer.delivery_method = :smtp + config.action_mailer.default_url_options = { + host: ENV["MAIL_LINK_HOST"], + protocol: (ENV["MAIL_LINK_PROTO"] || "https") + } + + smtp_env = Hash[ENV.map do |k,v| + if /^SMTP_(.*)$/ === k + [$1.downcase.to_sym, YAML.load(v)] + end + end.compact] + + if smtp_env.present? + config.action_mailer.smtp_settings = smtp_env + end + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end From f0d061fb5cba4b316d9e1f0ce922365be0c5a2fb Mon Sep 17 00:00:00 2001 From: Enrico Stano Date: Tue, 30 Jan 2018 20:14:01 +0100 Subject: [PATCH 3/6] Ask for branch to deploy --- config/deploy.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/deploy.rb b/config/deploy.rb index 507e21b09..d842d9643 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -7,7 +7,7 @@ set :rbenv_type, :user # Default branch is :master -# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp +ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp # Default deploy_to directory is /var/www/my_app_name # set :deploy_to, '/var/www/my_app_name' From 3b9d03b4ce590e16b3ce96054532464981aa3a94 Mon Sep 17 00:00:00 2001 From: Enrico Stano Date: Wed, 31 Jan 2018 10:54:54 +0100 Subject: [PATCH 4/6] Add default DB name for staging --- config/database.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/database.yml b/config/database.yml index 5ff305bc2..5856d3b67 100644 --- a/config/database.yml +++ b/config/database.yml @@ -27,7 +27,7 @@ test: staging: <<: *defaults - database: <%= ENV.fetch('DATABASE_NAME') %> + database: <%= ENV.fetch('DATABASE_NAME', 'timeoverflow_staging') %> production: # Set DATABASE_URL environment variable From 325ce2101597dd8411b6807307f654ba29ef06aa Mon Sep 17 00:00:00 2001 From: Enrico Stano Date: Wed, 31 Jan 2018 16:20:26 +0100 Subject: [PATCH 5/6] Doc++ --- config/environments/staging.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/environments/staging.rb b/config/environments/staging.rb index fe4480f76..b451781fe 100644 --- a/config/environments/staging.rb +++ b/config/environments/staging.rb @@ -71,6 +71,8 @@ protocol: (ENV["MAIL_LINK_PROTO"] || "https") } + # Retrieve SMTP configuration from environment variables + # starting with `SMTP_` smtp_env = Hash[ENV.map do |k,v| if /^SMTP_(.*)$/ === k [$1.downcase.to_sym, YAML.load(v)] From 0d44fa937798861438c9bacf033aa1f27e68d119 Mon Sep 17 00:00:00 2001 From: Enrico Stano Date: Wed, 31 Jan 2018 16:22:00 +0100 Subject: [PATCH 6/6] Add secret token for staging environment --- config/secrets.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/secrets.yml b/config/secrets.yml index 296ee64bb..f915c5e4c 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -4,5 +4,8 @@ development: test: secret_key_base: fde628fa241d74a55d7b0fc8fe1b650091e296d6a4d1e51beba3bfa2ed5c143801c28aaadf318aaefc4423bca781f9715441298052b4f704a8c44f97968feb00 +staging: + secret_key_base: <%= ENV['SECRET_TOKEN'] %> + production: secret_key_base: <%= ENV['SECRET_TOKEN'] %>