Kntmrkm.new

WEB技術のメモ

rails5 アップグレード

Rails4.2からのアップグレードメモ。

重要

autoloadがproductionでのみ読み込まれない

一番困るタイプ。productionのみで発生する。

config.paths.add 'lib', eager_load: trueで対応する。

qiita.com

Gemfile

bundle updateで依存関係を確認して適宜修正

TurbolinksはjQueryを使う場合はgem 'turbolinks', '< 5.0'とする。

LoadError: cannot load such file -- rack/showexceptions

Gemfileにsinatraがある場合に発生。

rails app:update

rails app:updateで設定ファイルを更新すると上書き確認が沢山出て来る。routes.rbなどをYとすると初期化されるので、 nを選択していき、binフォルダのみを上書きする。

手作業で設定ファイルの差分を変更

上書きされたら困るものはrails5を新規アプリケーションで作成して差分を更新していく

config/development.rb

-  config.action_controller.perform_caching = false
+  # 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
+  config.action_mailer.perform_caching = false

config/production.rb

-  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
+  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
-  config.assets.digest = true
+  #config.assets.digest = true # no need rails5
-  #config.log_tags = [ :subdomain, :uuid ]
+ config.log_tags = [ :request_id ]
+  # 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 = "rails5_#{Rails.env}"
+  config.action_mailer.perform_caching = false
+  # 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

config/test.rb

-  # 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'
+  }
+  config.action_mailer.perform_caching = false
- # Randomize the order test cases are executed.
-  config.active_support.test_order = :random

app/models/application_record.rbに書き換え

ActiveRecord::BaseApplicationRecordに書き換える。

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end