Rails upgrade 5.2 to 6.0
Rails 5.2.0 to 6.0.0
* 6.0 에서 ActionText를 사용할 수 있다! 흥미로움
1. Rails 6은 Ruby 2.5.0 이상 버전에서 동작
2. rails app:update 를 실행
3. config.load_defaults in config/application.rb 변경하기
config.load_defaults 6.0
application.rb에 Rails.autoloaders.logger = method(:puts) 입력 시 레일즈 시작할때 autoloads되는 것들을 볼 수 있음.
https://edgeguides.rubyonrails.org/6_0_release_notes.html
https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#common-gotchas
원인을 찾는 중
상속관계
ApplicationController (get_current_user)
AdminController (before_action: verify_admin 내에서 ApplicationController의 get_current_user 호출 불가)
BController ....대체 왜 6.0에서는 불가능한것이지?
원인은 찾음. 6.0부터는 autoloading 방식이 :zeitwerk이 기본
(방식에는 :zeitwerk and :classic 두가지가 존재하는데, 6.0 이전에는 :classic 방식을 사용했었음)
만약 서비스 중인 어플리케이션이라면, application.rb 에 config.autoloader = :classic으로 세팅 후 사용하는 것이 나을 듯
zeitwerk autoload 방식은 https://mnworld.co.kr/1909 으로 업데이트 중
https://weblog.rubyonrails.org/2019/2/22/zeitwerk-integration-in-rails-6-beta-2/
https://github.com/fxn/zeitwerk/issues/19
https://medium.com/@fxn/zeitwerk-a-new-code-loader-for-ruby-ae7895977e73
skip_before_action :verify_authenticity_token 이슈도 살펴봐야 함
수정 시 puma가 controller 로딩 못하는 상황
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
bin/rails에 추가
model에 override된 메서드가 동작을 안함..
-> https://github.com/rails/rails/issues/36100
-> https://github.com/rails/rails/issues/35749
Override 이슈 -> 해당이슈도 https://mnworld.co.kr/1909에서 같이 정리 중.
그 외,
features.where(awesomeness: 10..) 와 같이 endless ranges가 가능
bin/rails db:system:change --to=postgresql 명령어를 쓰면 sqlite에서 postgresql로 바로 변경이 가능