From 57ae87cccb3c8177ca2d04482033d26259fb9890 Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Sun, 30 Sep 2018 16:21:47 -0500 Subject: [PATCH 1/6] Initial gem update to Rails 5.x Co-Authored-By: Dan Rice --- Gemfile | 18 +++--- Gemfile.lock | 165 +++++++++++++++++++++++++++------------------------ 2 files changed, 96 insertions(+), 87 deletions(-) diff --git a/Gemfile b/Gemfile index d12339e6..b5522b45 100644 --- a/Gemfile +++ b/Gemfile @@ -1,20 +1,21 @@ source 'https://rubygems.org' -gem 'rails', '~> 4.2.10' +gem 'rails', '~> 5.0.0' gem 'sass-rails', '~> 5.0' -gem 'coffee-rails', '~> 4.1.0' +gem 'coffee-rails', '~> 4.2.0' #gem 'json' # todo: remove xml api -gem 'actionpack-xml_parser', '>=1.0.1' +gem "actionpack-xml_parser", "~> 2.0" +gem "activemodel-serializers-xml", "~> 1.0.1" # See https://github.com/sstephenson/execjs#readme for more supported runtimes gem 'therubyracer', group: :therubyracer gem 'uglifier', '>=1.3.0' -gem 'jquery-rails' , '~> 3.1.3' +gem 'jquery-rails' , '~> 4.0' gem 'jquery-ui-rails' , '~>5.0.5' # you may comment out the database driver(s) you will not be using. @@ -51,7 +52,7 @@ group :development do gem "spring" gem "yard" - gem 'tolk', '~> 1.9.3' + gem 'tolk', '~> 2.0.0' gem "bullet" gem "rack-mini-profiler" @@ -59,14 +60,13 @@ group :development do end group :development, :test do - gem 'pry' + gem 'byebug' gem "rubocop", "~> 0.49", require: false end group :test do - # Pull in the fix for rails-dom-testing issue #42 - # TODO: Remove with Rails 5 and rails-dom-testing 2.x - gem 'rails-dom-testing', git: 'https://github.com/rails/rails-dom-testing', ref: 'a64f30514ee65f172c43f42cfd4500b5e11a561a' + gem 'rails-controller-testing' + gem 'rails-dom-testing', '~> 2.0.0' gem "factory_bot_rails" diff --git a/Gemfile.lock b/Gemfile.lock index 83425437..a27f79af 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,57 +1,55 @@ -GIT - remote: https://github.com/rails/rails-dom-testing - revision: a64f30514ee65f172c43f42cfd4500b5e11a561a - ref: a64f30514ee65f172c43f42cfd4500b5e11a561a - specs: - rails-dom-testing (1.0.7) - activesupport (>= 4.2.0.beta, < 5.0) - nokogiri (~> 1.6.0) - rails-deprecated_sanitizer (>= 1.0.1) - GEM remote: https://rubygems.org/ specs: RedCloth (4.3.2) aasm (3.4.0) - actionmailer (4.2.10) - actionpack (= 4.2.10) - actionview (= 4.2.10) - activejob (= 4.2.10) + actioncable (5.0.7) + actionpack (= 5.0.7) + nio4r (>= 1.2, < 3.0) + websocket-driver (~> 0.6.1) + actionmailer (5.0.7) + actionpack (= 5.0.7) + actionview (= 5.0.7) + activejob (= 5.0.7) mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.10) - actionview (= 4.2.10) - activesupport (= 4.2.10) - rack (~> 1.6) - rack-test (~> 0.6.2) - rails-dom-testing (~> 1.0, >= 1.0.5) + rails-dom-testing (~> 2.0) + actionpack (5.0.7) + actionview (= 5.0.7) + activesupport (= 5.0.7) + rack (~> 2.0) + rack-test (~> 0.6.3) + rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionpack-xml_parser (1.0.2) - actionpack (>= 4.0.0, < 5) - actionview (4.2.10) - activesupport (= 4.2.10) + actionpack-xml_parser (2.0.1) + actionpack (>= 5.0) + railties (>= 5.0) + actionview (5.0.7) + activesupport (= 5.0.7) builder (~> 3.1) erubis (~> 2.7.0) - rails-dom-testing (~> 1.0, >= 1.0.5) + rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (4.2.10) - activesupport (= 4.2.10) - globalid (>= 0.3.0) - activemodel (4.2.10) - activesupport (= 4.2.10) + activejob (5.0.7) + activesupport (= 5.0.7) + globalid (>= 0.3.6) + activemodel (5.0.7) + activesupport (= 5.0.7) + activemodel-serializers-xml (1.0.2) + activemodel (> 5.x) + activesupport (> 5.x) builder (~> 3.1) - activerecord (4.2.10) - activemodel (= 4.2.10) - activesupport (= 4.2.10) - arel (~> 6.0) - activesupport (4.2.10) - i18n (~> 0.7) + activerecord (5.0.7) + activemodel (= 5.0.7) + activesupport (= 5.0.7) + arel (~> 7.0) + activesupport (5.0.7) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) acts_as_list (0.9.15) activerecord (>= 3.0) - arel (6.0.4) + arel (7.1.4) ast (2.4.0) autoprefixer-rails (8.6.5) execjs @@ -63,15 +61,15 @@ GEM bullet (5.7.5) activesupport (>= 3.0.0) uniform_notifier (~> 1.11.0) + byebug (10.0.2) childprocess (0.9.0) ffi (~> 1.0, >= 1.0.11) climate_control (0.2.0) codeclimate-test-reporter (1.0.7) simplecov - coderay (1.1.2) - coffee-rails (4.1.1) + coffee-rails (4.2.2) coffee-script (>= 2.2.0) - railties (>= 4.0.0, < 5.1.x) + railties (>= 4.0.0) coffee-script (2.4.1) coffee-script-source execjs @@ -96,11 +94,12 @@ GEM globalid (0.4.1) activesupport (>= 4.2.0) htmlentities (4.3.4) - i18n (0.9.5) + i18n (1.1.0) concurrent-ruby (~> 1.0) jaro_winkler (1.5.1) - jquery-rails (3.1.5) - railties (>= 3.0, < 5.0) + jquery-rails (4.3.3) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) thor (>= 0.14, < 2.0) jquery-ui-rails (5.0.5) railties (>= 3.2.16) @@ -117,15 +116,16 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) mimemagic (0.3.2) - mini_mime (1.0.0) - mini_portile2 (2.1.0) + mini_mime (1.0.1) + mini_portile2 (2.3.0) minitest (5.11.3) minitest-stub-const (0.6) mocha (1.6.0) metaclass (~> 0.0.1) mysql2 (0.3.21) - nokogiri (1.6.8.1) - mini_portile2 (~> 2.1.0) + nio4r (2.3.1) + nokogiri (1.8.4) + mini_portile2 (~> 2.3.0) nokogumbo (1.5.0) nokogiri paperclip (6.1.0) @@ -138,36 +138,40 @@ GEM parser (2.5.1.2) ast (~> 2.4.0) powerpack (0.1.2) - pry (0.11.3) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - rack (1.6.10) + rack (2.0.5) rack-dev-mark (0.7.7) rack (>= 1.1, < 2.1) rack-mini-profiler (1.0.0) rack (>= 1.2.0) rack-test (0.6.3) rack (>= 1.0) - rails (4.2.10) - actionmailer (= 4.2.10) - actionpack (= 4.2.10) - actionview (= 4.2.10) - activejob (= 4.2.10) - activemodel (= 4.2.10) - activerecord (= 4.2.10) - activesupport (= 4.2.10) - bundler (>= 1.3.0, < 2.0) - railties (= 4.2.10) - sprockets-rails - rails-deprecated_sanitizer (1.0.3) - activesupport (>= 4.2.0.alpha) + rails (5.0.7) + actioncable (= 5.0.7) + actionmailer (= 5.0.7) + actionpack (= 5.0.7) + actionview (= 5.0.7) + activejob (= 5.0.7) + activemodel (= 5.0.7) + activerecord (= 5.0.7) + activesupport (= 5.0.7) + bundler (>= 1.3.0) + railties (= 5.0.7) + sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.2) + actionpack (~> 5.x, >= 5.0.1) + actionview (~> 5.x, >= 5.0.1) + activesupport (~> 5.x) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) rails-html-sanitizer (1.0.4) loofah (~> 2.2, >= 2.2.2) rails_autolink (1.1.6) rails (> 3.1) - railties (4.2.10) - actionpack (= 4.2.10) - activesupport (= 4.2.10) + railties (5.0.7) + actionpack (= 5.0.7) + activesupport (= 5.0.7) + method_source rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (3.0.0) @@ -240,8 +244,8 @@ GEM thor (0.20.0) thread_safe (0.3.6) tilt (2.0.8) - tolk (1.9.3) - rails (>= 4.0, < 4.3) + tolk (2.0.0) + rails (>= 4.0) safe_yaml (>= 0.8.6) tzinfo (1.2.5) thread_safe (~> 0.1) @@ -250,6 +254,9 @@ GEM unicode-display_width (1.4.0) uniform_notifier (1.11.0) websocket (1.2.8) + websocket-driver (0.6.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.3) will_paginate (3.1.6) yard (0.9.15) @@ -259,28 +266,30 @@ PLATFORMS DEPENDENCIES RedCloth aasm (~> 3.4.0) - actionpack-xml_parser (>= 1.0.1) + actionpack-xml_parser (~> 2.0) + activemodel-serializers-xml (~> 1.0.1) acts_as_list bcrypt (~> 3.1.7) bootstrap-sass (= 3.3.3) bullet + byebug codeclimate-test-reporter (= 1.0.7) - coffee-rails (~> 4.1.0) + coffee-rails (~> 4.2.0) database_cleaner factory_bot_rails font-awesome-sass (~> 4.5.0) htmlentities - jquery-rails (~> 3.1.3) + jquery-rails (~> 4.0) jquery-ui-rails (~> 5.0.5) minitest-stub-const mocha mysql2 (~> 0.3.17) paperclip - pry rack-dev-mark rack-mini-profiler - rails (~> 4.2.10) - rails-dom-testing! + rails (~> 5.0.0) + rails-controller-testing + rails-dom-testing (~> 2.0.0) rails_autolink rspec-expectations rubocop (~> 0.49) @@ -293,7 +302,7 @@ DEPENDENCIES swf_fu therubyracer thin - tolk (~> 1.9.3) + tolk (~> 2.0.0) uglifier (>= 1.3.0) will_paginate yard From c7b9f008a6f7f417ed432e9506fdcb9611304969 Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Wed, 17 Oct 2018 09:14:08 -0500 Subject: [PATCH 2/6] Use `puma` instead of `thin` Puma has become the default and has some really nice integration points in Rails. Co-Authored-By: Dan Rice --- Gemfile | 2 +- Gemfile.lock | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index b5522b45..fc0d620e 100644 --- a/Gemfile +++ b/Gemfile @@ -33,7 +33,7 @@ gem "aasm", '~> 3.4.0' gem "htmlentities" gem "swf_fu" gem "rails_autolink" -gem 'thin' +gem 'puma', '~> 3.0' gem 'paperclip' # To use ActiveModel has_secure_password diff --git a/Gemfile.lock b/Gemfile.lock index a27f79af..61dd227d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -76,12 +76,10 @@ GEM coffee-script-source (1.12.2) concurrent-ruby (1.0.5) crass (1.0.4) - daemons (1.2.6) database_cleaner (1.7.0) diff-lcs (1.3) docile (1.3.1) erubis (2.7.0) - eventmachine (1.2.7) execjs (2.7.0) factory_bot (4.10.0) activesupport (>= 3.0.0) @@ -138,6 +136,7 @@ GEM parser (2.5.1.2) ast (~> 2.4.0) powerpack (0.1.2) + puma (3.12.0) rack (2.0.5) rack-dev-mark (0.7.7) rack (>= 1.1, < 2.1) @@ -237,10 +236,6 @@ GEM therubyracer (0.12.3) libv8 (~> 3.16.14.15) ref - thin (1.7.2) - daemons (~> 1.0, >= 1.0.9) - eventmachine (~> 1.0, >= 1.0.4) - rack (>= 1, < 3) thor (0.20.0) thread_safe (0.3.6) tilt (2.0.8) @@ -285,6 +280,7 @@ DEPENDENCIES mocha mysql2 (~> 0.3.17) paperclip + puma (~> 3.0) rack-dev-mark rack-mini-profiler rails (~> 5.0.0) @@ -301,7 +297,6 @@ DEPENDENCIES sqlite3 swf_fu therubyracer - thin tolk (~> 2.0.0) uglifier (>= 1.3.0) will_paginate From 859701a81f2ef02660adcef4c1a5683bc0fdf837 Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Wed, 17 Oct 2018 09:38:04 -0500 Subject: [PATCH 3/6] Update configuration after the Rails upgrade Ran `bin/rake rails:upgrade` and went through all the changes. Co-Authored-By: Dan Rice --- bin/rails | 2 +- bin/setup | 32 +++++++------ bin/update | 29 ++++++++++++ config/application.rb | 4 +- config/boot.rb | 2 +- config/cable.yml | 9 ++++ config/environment.rb | 2 +- config/environments/development.rb | 31 +++++++----- config/environments/production.rb | 43 ++++++++++------- config/environments/test.rb | 12 ++--- .../application_controller_renderer.rb | 8 ++++ config/initializers/cookies_serializer.rb | 2 + config/initializers/new_framework_defaults.rb | 25 ++++++++++ config/initializers/wrap_parameters.rb | 4 +- config/puma.rb | 47 +++++++++++++++++++ config/secrets.yml | 16 ++++++- config/spring.rb | 6 +++ 17 files changed, 215 insertions(+), 59 deletions(-) create mode 100755 bin/update create mode 100644 config/cable.yml create mode 100644 config/initializers/application_controller_renderer.rb create mode 100644 config/initializers/new_framework_defaults.rb create mode 100644 config/puma.rb create mode 100644 config/spring.rb diff --git a/bin/rails b/bin/rails index 3ea4cfa0..41582adf 100755 --- a/bin/rails +++ b/bin/rails @@ -3,6 +3,6 @@ if ENV["RAILS_ENV"] != "production" exec("#{__dir__}/../script/docker-environment", $PROGRAM_NAME, *ARGV) unless File.exist?("/etc/app-env") end -APP_PATH = File.expand_path('../../config/application', __FILE__) +APP_PATH = File.expand_path('../config/application', __dir__) require_relative '../config/boot' require 'rails/commands' diff --git a/bin/setup b/bin/setup index 3eb1ec60..e620b4da 100755 --- a/bin/setup +++ b/bin/setup @@ -1,32 +1,34 @@ #!/usr/bin/env ruby -if ENV["RAILS_ENV"] != "production" - exec("#{__dir__}/../script/docker-environment", $PROGRAM_NAME, *ARGV) unless File.exist?("/etc/app-env") -end require 'pathname' +require 'fileutils' +include FileUtils # path to your application root. -APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) -Dir.chdir APP_ROOT do +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do # This script is a starting point to setup your application. - # Add necessary setup steps to this file: + # Add necessary setup steps to this file. - puts "== Installing dependencies ==" - system "gem install bundler --conservative" - system "bundle check || bundle install" + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') # puts "\n== Copying sample files ==" - # unless File.exist?("config/database.yml") - # system "cp config/database.yml.sample config/database.yml" + # unless File.exist?('config/database.yml') + # cp 'config/database.yml.sample', 'config/database.yml' # end puts "\n== Preparing database ==" - system "bin/rake db:setup" + system! 'bin/rails db:setup' puts "\n== Removing old logs and tempfiles ==" - system "rm -f log/*" - system "rm -rf tmp/cache" + system! 'bin/rails log:clear tmp:clear' puts "\n== Restarting application server ==" - system "touch tmp/restart.txt" + system! 'bin/rails restart' end diff --git a/bin/update b/bin/update new file mode 100755 index 00000000..a8e4462f --- /dev/null +++ b/bin/update @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do + # This script is a way to update your development environment automatically. + # Add necessary update steps to this file. + + puts '== Installing dependencies ==' + system! 'gem install bundler --conservative' + system('bundle check') || system!('bundle install') + + puts "\n== Updating database ==" + system! 'bin/rails db:migrate' + + puts "\n== Removing old logs and tempfiles ==" + system! 'bin/rails log:clear tmp:clear' + + puts "\n== Restarting application server ==" + system! 'bin/rails restart' +end diff --git a/config/application.rb b/config/application.rb index 972c9383..c9a7781f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -1,4 +1,4 @@ -require File.expand_path('../boot', __FILE__) +require_relative 'boot' require 'rails/all' @@ -33,7 +33,5 @@ module Tracksapp # configure Tracks to handle deployment in a subdir config.relative_url_root = SITE_CONFIG['subdir'] if SITE_CONFIG['subdir'] - - config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::XmlParamsParser end end diff --git a/config/boot.rb b/config/boot.rb index 6b750f00..30f5120d 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,3 +1,3 @@ -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 00000000..0bbde6f7 --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,9 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: redis://localhost:6379/1 diff --git a/config/environment.rb b/config/environment.rb index ee8d90dc..426333bb 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,5 +1,5 @@ # Load the Rails application. -require File.expand_path('../application', __FILE__) +require_relative 'application' # Initialize the Rails application. Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb index a4af699c..e2a0f9e6 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -9,13 +9,28 @@ Rails.application.configure do # Do not eager load code on boot. config.eager_load = false - # Show full error reports and disable caching. - config.consider_all_requests_local = true - config.action_controller.perform_caching = false + # Show full error reports. + config.consider_all_requests_local = true + + # Enable/disable caching. By default caching is disabled. + if Rails.root.join('tmp/caching-dev.txt').exist? + config.action_controller.perform_caching = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + 'Cache-Control' => 'public, max-age=172800' + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end # Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false + config.action_mailer.perform_caching = false + # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log @@ -27,14 +42,8 @@ Rails.application.configure do # number of complex assets. config.assets.debug = true - # 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 - - # Adds additional error checking when serving assets at runtime. - # Checks for improperly declared sprockets dependencies. - # Raises helpful error messages. - config.assets.raise_runtime_errors = true + # Suppress logger output for asset requests. + config.assets.quiet = true config.rack_dev_mark.enable = true diff --git a/config/environments/production.rb b/config/environments/production.rb index 99d6fcff..18d944c8 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -14,15 +14,9 @@ Rails.application.configure do 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? || SITE_CONFIG['serve_static_assets'] || false + config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? # Compress JavaScripts and CSS. config.assets.js_compressor = :uglifier @@ -31,34 +25,37 @@ Rails.application.configure do # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = 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 + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + # 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 + # Mount Action Cable outside main process or domain + # config.action_cable.mount_path = nil + # config.action_cable.url = 'wss://example.com/cable' + # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. - config.force_ssl = SITE_CONFIG['force_ssl'] + # 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) + config.log_tags = [ :request_id ] # Use a different cache store in production. # config.cache_store = :mem_cache_store - # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = 'http://assets.example.com' + # Use a real queuing backend for Active Job (and separate queues per environment) + # config.active_job.queue_adapter = :resque + # config.active_job.queue_name_prefix = "tracksapp_#{Rails.env}" + config.action_mailer.perform_caching = false # 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. @@ -74,6 +71,16 @@ Rails.application.configure do # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new + # Use a different logger for distributed setups. + # require 'syslog/logger' + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new(STDOUT) + logger.formatter = config.log_formatter + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false end diff --git a/config/environments/test.rb b/config/environments/test.rb index 1c19f08b..30587ef6 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -12,9 +12,11 @@ Rails.application.configure do # preloads Rails for running tests, you may have to set it to true. config.eager_load = false - # Configure static file server for tests with Cache-Control for performance. - config.serve_static_files = true - config.static_cache_control = 'public, max-age=3600' + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + 'Cache-Control' => 'public, max-age=3600' + } # Show full error reports and disable caching. config.consider_all_requests_local = true @@ -25,15 +27,13 @@ Rails.application.configure do # Disable request forgery protection in test environment. config.action_controller.allow_forgery_protection = false + config.action_mailer.perform_caching = false # Tell Action Mailer not to deliver emails to the real world. # The :test delivery method accumulates sent emails in the # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test - # Randomize the order test cases are executed. - config.active_support.test_order = :random - # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb new file mode 100644 index 00000000..89d2efab --- /dev/null +++ b/config/initializers/application_controller_renderer.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# ActiveSupport::Reloader.to_prepare do +# ApplicationController.renderer.defaults.merge!( +# http_host: 'example.org', +# https: false +# ) +# end diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb index ac5f8b66..1389e86a 100644 --- a/config/initializers/cookies_serializer.rb +++ b/config/initializers/cookies_serializer.rb @@ -1,3 +1,5 @@ # Be sure to restart your server when you modify this file. +# Specify a serializer for the signed and encrypted cookie jars. +# Valid options are :json, :marshal, and :hybrid. Rails.application.config.action_dispatch.cookies_serializer = :marshal diff --git a/config/initializers/new_framework_defaults.rb b/config/initializers/new_framework_defaults.rb new file mode 100644 index 00000000..cbf423a8 --- /dev/null +++ b/config/initializers/new_framework_defaults.rb @@ -0,0 +1,25 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains migration options to ease your Rails 5.0 upgrade. +# +# Once upgraded flip defaults one by one to migrate to the new default. +# +# Read the Guide for Upgrading Ruby on Rails for more info on each option. + +Rails.application.config.action_controller.raise_on_unfiltered_parameters = true + +# Enable per-form CSRF tokens. Previous versions had false. +Rails.application.config.action_controller.per_form_csrf_tokens = false + +# Enable origin-checking CSRF mitigation. Previous versions had false. +Rails.application.config.action_controller.forgery_protection_origin_check = false + +# Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`. +# Previous versions had false. +ActiveSupport.to_time_preserves_timezone = false + +# Require `belongs_to` associations by default. Previous versions had false. +Rails.application.config.active_record.belongs_to_required_by_default = false + +# Do not halt callback chains when a callback returns false. Previous versions had true. +ActiveSupport.halt_callback_chains_on_return_false = true diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb index 33725e95..bbfc3961 100644 --- a/config/initializers/wrap_parameters.rb +++ b/config/initializers/wrap_parameters.rb @@ -5,10 +5,10 @@ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. ActiveSupport.on_load(:action_controller) do - wrap_parameters format: [:json] if respond_to?(:wrap_parameters) + wrap_parameters format: [:json] end # To enable root element in JSON for ActiveRecord objects. # ActiveSupport.on_load(:active_record) do -# self.include_root_in_json = true +# self.include_root_in_json = true # end diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 00000000..c7f311f8 --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,47 @@ +# Puma can serve each request in a thread from an internal thread pool. +# The `threads` method setting takes two numbers a minimum and maximum. +# Any libraries that use thread pools should be configured to match +# the maximum value specified for Puma. Default is set to 5 threads for minimum +# and maximum, this matches the default thread size of Active Record. +# +threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i +threads threads_count, threads_count + +# Specifies the `port` that Puma will listen on to receive requests, default is 3000. +# +port ENV.fetch("PORT") { 3000 } + +# Specifies the `environment` that Puma will run in. +# +environment ENV.fetch("RAILS_ENV") { "development" } + +# Specifies the number of `workers` to boot in clustered mode. +# Workers are forked webserver processes. If using threads and workers together +# the concurrency of the application would be max `threads` * `workers`. +# Workers do not work on JRuby or Windows (both of which do not support +# processes). +# +# workers ENV.fetch("WEB_CONCURRENCY") { 2 } + +# Use the `preload_app!` method when specifying a `workers` number. +# This directive tells Puma to first boot the application and load code +# before forking the application. This takes advantage of Copy On Write +# process behavior so workers use less memory. If you use this option +# you need to make sure to reconnect any threads in the `on_worker_boot` +# block. +# +# preload_app! + +# The code in the `on_worker_boot` will be called if you are using +# clustered mode by specifying a number of `workers`. After each worker +# process is booted this block will be run, if you are using `preload_app!` +# option you will want to use this block to reconnect to any threads +# or connections that may have been created at application boot, Ruby +# cannot share connections between processes. +# +# on_worker_boot do +# ActiveRecord::Base.establish_connection if defined?(ActiveRecord) +# end + +# Allow puma to be restarted by `rails restart` command. +plugin :tmp_restart diff --git a/config/secrets.yml b/config/secrets.yml index 9aec537e..a54d650f 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -1,8 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rails secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + development: secret_key_base: <%= SITE_CONFIG["secret_token"] || SecureRandom.hex(64) %> test: secret_key_base: <%= SITE_CONFIG["secret_token"] || SecureRandom.hex(64) %> +# Do not keep production secrets in the repository, +# instead read values from the environment. production: - secret_key_base: <%= SITE_CONFIG["secret_token"] || SecureRandom.hex(64) %> \ No newline at end of file + secret_key_base: <%= SITE_CONFIG["secret_token"] || SecureRandom.hex(64) %> diff --git a/config/spring.rb b/config/spring.rb new file mode 100644 index 00000000..c9119b40 --- /dev/null +++ b/config/spring.rb @@ -0,0 +1,6 @@ +%w( + .ruby-version + .rbenv-vars + tmp/restart.txt + tmp/caching-dev.txt +).each { |path| Spring.watch(path) } From 6e70fcbe5e683b1e9c15ae23ea0708592bd684fc Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Sat, 27 Oct 2018 10:20:58 -0500 Subject: [PATCH 4/6] Update how the sorting is done in the User model Use the `sort_by` method to do the sorting rather than converting to an array and then calling `sort` Co-Authored-By: Dan Rice --- app/models/user.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 686a045e..38838dca 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -56,13 +56,13 @@ class User < ActiveRecord::Base end def alphabetize(scope_conditions = {}) projects = where(scope_conditions) - projects.to_a.sort!{ |x,y| x.name.downcase <=> y.name.downcase } + projects = projects.sort_by { |project| project.name.downcase } self.update_positions(projects.map{ |p| p.id }) return projects end def actionize(scope_conditions = {}) todos_in_project = where(scope_conditions).includes(:todos) - todos_in_project.to_a.sort_by!{ |x| [-x.todos.active.count, -x.id] } + todos_in_project = todos_in_project.sort_by { |x| [-x.todos.active.count, -x.id] } todos_in_project.reject{ |p| p.todos.active.count > 0 } sorted_project_ids = todos_in_project.map {|p| p.id} From 36e59746ea5612fe0a3e357c4be911df59b0b47b Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Sat, 27 Oct 2018 12:28:29 -0500 Subject: [PATCH 5/6] Add the environment setup for Rails 5 --- script/cibuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/cibuild b/script/cibuild index 117aa192..d6de0df1 100755 --- a/script/cibuild +++ b/script/cibuild @@ -25,7 +25,7 @@ $docker_compose up -d script/poll-for-db # Leaving this in since it will be needed for Rails 5 -# bin/rails db:environment:set RAILS_ENV=test || true +bin/rails db:environment:set RAILS_ENV=test || true bin/rake db:reset bin/rake test From fd2f49596c1f59131f19b8962b946357abf21b6e Mon Sep 17 00:00:00 2001 From: Matt Rogers Date: Sat, 27 Oct 2018 13:33:40 -0500 Subject: [PATCH 6/6] Update test with the proper param structure Fixes the test failure we were seeing here. --- test/controllers/todos_controller_test.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/controllers/todos_controller_test.rb b/test/controllers/todos_controller_test.rb index 1f23616c..df292c15 100644 --- a/test/controllers/todos_controller_test.rb +++ b/test/controllers/todos_controller_test.rb @@ -383,7 +383,14 @@ class TodosControllerTest < ActionController::TestCase assert todo.hidden?, 'todo should be hidden' # clear project from todo: the todo should be unhidden - xhr :post, :update, :id => todo.id, :_source_view => 'todo', "project_name"=>"", "todo"=>{} + post :update, xhr: true, params: { + "id" => todo.id, + "_source_view" => 'todo', + "project_name" => "", + "todo" => { + "id" => todo.id + } + } assert assigns['project_changed'], "the project of the todo should be changed" todo = Todo.find(todo.id) # reload does not seem to work anymore