1 Rails 7.0으로 업그레이드
기존 애플리케이션을 업그레이드하는 경우, 시작하기 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 아직 하지 않으셨다면 먼저 Rails 6.1로 업그레이드하고, Rails 7.0으로 업데이트를 시도하기 전에 애플리케이션이 예상대로 작동하는지 확인해야 합니다. 업그레이드 시 주의해야 할 사항 목록은 Ruby on Rails 업그레이드 가이드에서 확인할 수 있습니다.
2 주요 기능
3 Railties
자세한 변경사항은 Changelog를 참조하세요.
3.1 제거사항
dbconsole
에서 deprecated된config
를 제거하였습니다.
3.2 기능 폐기(Deprecations)
3.3 주요 변경사항
Sprockets는 이제 선택적 의존성입니다
rails
gem은 더 이상sprockets-rails
에 의존하지 않습니다. 애플리케이션에서 여전히 Sprockets를 사용해야 하는 경우, Gemfile에sprockets-rails
를 추가하세요.gem "sprockets-rails"
4 Action Cable
자세한 변경사항은 Changelog를 참조하세요.
4.1 제거사항
더이상
ActionDispatch::ParamsParser::DEFAULT_PARSERS
를 지원하지 않습니다.ActionDispatch::Session::MemCacheStore
를 제거했습니다.:method_key
HTML 옵션을 form helper에서 제거했습니다.env_config.delete('action_dispatch.show_exceptions')
를 제거했습니다.env_config.delete('action_dispatch.show_detailed_exceptions')
를 제거했습니다.env_config.delete('action_dispatch.logger')
를 제거했습니다.HTTP response message에서 따옴표를 제거했습니다.
render :text
옵션을 제거했습니다.render body: string
은 더이상 기본Content-Type
으로text/html
을 설정하지 않습니다.public_send
와respond_to?
가 없는 모든 상수들은 더 이상 controller helper로 노출되지 않습니다.ActionController::Parameters#*
operator를 제거했습니다.config.action_dispatch.ip_spoofing_check
옵션을 제거했습니다.더 이상
config.action_controller.relative_url_root
를 사용하지 않습니다.AbstractController::Helpers::ClassMethods
에서helper
method의 블록을 제거했습니다.
4.2 지원 중단(Deprecation) 안내
Hash#transform_keys!
사용 시 기존 해시를 변형하면서 변형된 키를 복사하는 방식은 더 이상 사용되지 않습니다.- 프로세스당 여러
ActiveRecord::Encryption.primary_key
를 지정하는 것은 더 이상 사용되지 않습니다. ActiveRecord::Encryption.key_derivation_salt
을 프로세스당 여러 번 지정하는 것은 더 이상 사용되지 않습니다.ActiveRecord::Encryption.deterministic_key
를 프로세스당 여러 번 지정하는 것은 더 이상 사용되지 않습니다.config.active_support.use_rfc4122_namespaced_uuids
는 더 이상 사용되지 않습니다. Rails 7.1에서는 항상 RFC4122 UUID 네임스페이스를 사용합니다.config.active_support.executor_around_test_case
는 더 이상 사용되지 않습니다.- 읽기 전용 array나 range에서 in-place 업데이트를 시도하는 것은 더 이상 사용되지 않습니다.
ActiveRecord::Base.strict_loading_by_default
는 더 이상 사용되지 않습니다.relation.reselect
메서드는 더 이상 사용되지 않습니다. 대신relation.unscope(:select).select
를 사용하세요.relation.regroup
메서드는 더 이상 사용되지 않습니다. 대신relation.unscope(:group).group
을 사용하세요.relation.reorder
메서드는 더 이상 사용되지 않습니다. 대신relation.unscope(:order).order
를 사용하세요.Class#descendants
와Class#subclasses
를 Rails 프레임워크 외부에서 사용하는 것은 더 이상 사용되지 않습니다.
4.3 주요 변경사항
5 Action Pack
자세한 변경사항은 Changelog를 참조하세요.
5.1 제거 사항
사용이 중단된
ActionDispatch::Response.return_only_media_type_on_content_type
제거.사용이 중단된
Rails.config.action_dispatch.hosts_response_app
제거.사용이 중단된
ActionDispatch::SystemTestCase#host!
제거.fixture_path
에 대한 상대 경로를fixture_file_upload
에 전달하는 사용 중단된 기능 제거.
5.2 사용 중단(Deprecation)
5.3 주목할 만한 변경점
6 Action View
자세한 변경사항은 Changelog를 참고해주세요.
6.1 제거된 기능들
- 더이상 사용되지 않는
Rails.config.action_view.raise_on_missing_translations
가 제거되었습니다.
6.2 사용 중단(Deprecation)
6.3 주목할만한 변경사항
Active Record 객체가 URL을 만드는데 사용되는 경우,
button_to
는 해당 객체로부터 HTTP verb [method]를 추론합니다button_to("Do a POST", [:do_post_action, Workshop.find(1)]) # 이전 #=> <input type="hidden" name="_method" value="post" autocomplete="off" /> # 이후 #=> <input type="hidden" name="_method" value="patch" autocomplete="off" />
7 Action Mailer
자세한 변경사항은 Changelog를 참조하세요.
7.1 삭제 항목
- 더 이상 사용되지 않는
ActionMailer::DeliveryJob
와ActionMailer::Parameterized::DeliveryJob
이ActionMailer::MailDeliveryJob
으로 대체되어 삭제되었습니다.
7.2 Deprecations (지원 중단)
Rails 애플리케이션을 업그레이드할 때, 일부 기능이 향후 버전에서 제거될 수 있다는 deprecation warning을 만날 수 있습니다. 이러한 deprecation warning은 컨트롤러에서 template를 렌더링하거나, views를 완전히 처리할 때 출력됩니다.
예를 들어 아래와 같은 deprecation warning이 있습니다:
DEPRECATION WARNING: The :child pseudo class selector has been deprecated and will be removed from Rails 7.0. See https://github.com/rails/rails/issues/45014. (called from _app_views_users_show_html_erb___435538683105387134_147520 at /Users/zzak/src/demo/app/views/users/show.html.erb:1)
현재 프로젝트에서 나타나는 모든 deprecation warning을 확인하려면:
$ DEPRECATION_WARNINGS=1 rails dev:cache
위의 명령을 실행하면 프로젝트의 모든 deprecation warning을 볼 수 있습니다.
7.3 주요 변경사항
8 Active Record
자세한 변경사항은 Changelog를 참조하세요.
8.1 제거된 기능
connected_to
에서 더 이상 사용되지 않는database
kwarg를 제거했습니다.더 이상 사용되지 않는
ActiveRecord::Base.allow_unsafe_raw_sql
를 제거했습니다.configs_for
메서드에서 더 이상 사용되지 않는:spec_name
옵션을 제거했습니다.Rails 4.2와 4.1 형식의 YAML로
ActiveRecord::Base
인스턴스를 로드하는 더 이상 사용되지 않는 지원을 제거했습니다.PostgreSQL 데이터베이스에서
:interval
컬럼 사용 시 표시되던 deprecation 경고를 제거했습니다.이제 interval 컬럼은 문자열 대신
ActiveSupport::Duration
객체를 반환합니다.이전 동작을 유지하려면 모델에 다음 라인을 추가하세요:
attribute :column, :string
연결 사양 이름으로
"primary"
를 사용해 연결을 해결하는 더 이상 사용되지 않는 지원을 제거했습니다.ActiveRecord::Base
객체를 인용하는 더 이상 사용되지 않는 지원을 제거했습니다.ActiveRecord::Base
객체를 데이터베이스 값으로 타입 캐스팅하는 더 이상 사용되지 않는 지원을 제거했습니다.type_cast
에 컬럼을 전달하는 더 이상 사용되지 않는 지원을 제거했습니다.더 이상 사용되지 않는
DatabaseConfig#config
메서드를 제거했습니다.더 이상 사용되지 않는 rake 작업들을 제거했습니다:
db:schema:load_if_ruby
db:structure:dump
db:structure:load
db:structure:load_if_sql
db:structure:dump:#{name}
db:structure:load:#{name}
db:test:load_structure
db:test:load_structure:#{name}
비결정적 순서를 사용하여 검색하는
Model.reorder(nil).first
의 더 이상 사용되지 않는 지원을 제거했습니다.Tasks::DatabaseTasks.schema_up_to_date?
에서 더 이상 사용되지 않는environment
와name
인자를 제거했습니다.더 이상 사용되지 않는
Tasks::DatabaseTasks.dump_filename
을 제거했습니다.더 이상 사용되지 않는
Tasks::DatabaseTasks.schema_file
을 제거했습니다.더 이상 사용되지 않는
Tasks::DatabaseTasks.spec
을 제거했습니다.더 이상 사용되지 않는
Tasks::DatabaseTasks.current_config
제거.더 이상 사용되지 않는
ActiveRecord::Connection#allowed_index_name_length
제거.더 이상 사용되지 않는
ActiveRecord::Connection#in_clause_length
제거.더 이상 사용되지 않는
ActiveRecord::DatabaseConfigurations::DatabaseConfig#spec_name
제거.더 이상 사용되지 않는
ActiveRecord::Base.connection_config
제거.더 이상 사용되지 않는
ActiveRecord::Base.arel_attribute
제거.더 이상 사용되지 않는
ActiveRecord::Base.configurations.default_hash
제거.더 이상 사용되지 않는
ActiveRecord::Base.configurations.to_h
제거.더 이상 사용되지 않는
ActiveRecord::Result#map!
과ActiveRecord::Result#collect!
제거.더 이상 사용되지 않는
ActiveRecord::Base#remove_connection
제거.
8.2 Deprecations
-
Tasks::DatabaseTasks.schema_file_type
이 deprecated 되었습니다.
8.3 주목할만한 변경사항
블록이 예상보다 일찍 종료될 때 트랜잭션을 롤백합니다.
이전에는 트랜잭션 블록이 일찍 종료되면 트랜잭션이 커밋되었습니다.
문제는 트랜잭션 블록 내부에서 발생한 타임아웃도 불완전한 트랜잭션을 커밋하게 만들었다는 것입니다. 이러한 실수를 방지하기 위해 트랜잭션 블록은 롤백됩니다.
같은 컬럼에 대한 조건을 병합할 때 더 이상 두 조건을 모두 유지하지 않으며, 일관되게 후자의 조건으로 대체됩니다.
# Rails 6.1 (IN 절이 병합 측의 equality 조건으로 대체됨) Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob] # Rails 6.1 (두 충돌하는 조건이 존재, deprecated) Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [] # Rails 6.1에서 rewhere를 사용하여 Rails 7.0 동작으로 마이그레이션 Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob] # Rails 7.0 (IN 절과 동일한 동작, 병합되는 측의 조건이 일관되게 대체됨) Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob] Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [bob]
9 Active Storage
자세한 변경사항은 Changelog를 참조하세요.
9.1 제거(Removals)
The deprecated
ActiveRecord::Migration::compatibility
setter has been removed. UseActiveRecord::Migration.[\]()
instead. Commit더 이상 사용되지 않는
ActiveRecord::Migration::compatibility
setter가 제거되었습니다. 대신ActiveRecord::Migration.[\]()
를 사용하세요. CommitThe deprecated support to passing a column to
sum
when a block is given has been removed. Commit블록이 주어진 경우
sum
에 column을 전달하는 deprecation된 지원이 제거되었습니다. CommitThe deprecated
ActiveRecord::ConnectionAdapters::SchemaCache#data_sources
method has been removed. Commitdeprecation된
ActiveRecord::ConnectionAdapters::SchemaCache#data_sources
메서드가 제거되었습니다. CommitThe deprecated support for using unsafe raw SQL in
ActiveRecord::Relation
methods has been removed. Applications should use the allowed methods for passing custom SQL fragments. CommitActiveRecord::Relation
메서드에서 안전하지 않은 raw SQL을 사용하는 지원이 deprecation되어 제거되었습니다. 애플리케이션에서는 커스텀 SQL 조각을 전달하기 위해 허용된 메서드를 사용해야 합니다. Commit
9.2 지원 중단 사항
A deprecation removes or modifies code that is no longer idiomatic but is still processed. By default, deprecation warnings are enabled in the development and test environments but disabled in production. You can change this by setting the config.active_support.deprecation
for the environment(s):
:silence
- Disable all deprecation warnings:notify
- Send all deprecation warnings to theActiveSupport::Deprecation.behavior
configured handler:stderr
- Send all deprecation warnings toSTDERR
:log
- Send all deprecation warnings to the configured logger:raise
- Raise an exception on each deprecation
Rails의 지원이 중단되는 것은 더 이상 관용적이지 않지만 여전히 처리되는 코드를 제거하거나 수정하는 것입니다. 기본적으로 지원 중단 경고는 development와 test 환경에서는 활성화되어 있고 production 환경에서는 비활성화되어 있습니다. 각 환경에 대한 config.active_support.deprecation
을 설정하여 이를 변경할 수 있습니다:
:silence
- 모든 지원 중단 경고를 비활성화:notify
- 모든 지원 중단 경고를 설정된ActiveSupport::Deprecation.behavior
핸들러로 전송:stderr
- 모든 지원 중단 경고를STDERR
로 전송:log
- 모든 지원 중단 경고를 설정된 logger로 전송:raise
- 각 지원 중단에 대해 예외를 발생시킴
9.3 주요 변경사항
10 Active Model
자세한 변경사항은 Changelog를 참조하세요.
10.1 제거된 기능들
ActiveModel::Errors
인스턴스를 Hash로 열거하는 deprecated된 기능이 제거되었습니다.deprecated된
ActiveModel::Errors#to_h
가 제거되었습니다.deprecated된
ActiveModel::Errors#slice!
가 제거되었습니다.deprecated된
ActiveModel::Errors#values
가 제거되었습니다.deprecated된
ActiveModel::Errors#keys
가 제거되었습니다.deprecated된
ActiveModel::Errors#to_xml
이 제거되었습니다.ActiveModel::Errors#messages
에 에러를 concat하는 deprecated된 지원이 제거되었습니다.ActiveModel::Errors#messages
에서 에러를clear
하는 deprecated된 지원이 제거되었습니다.ActiveModel::Errors#messages
에서 에러를delete
하는 deprecated된 지원이 제거되었습니다.ActiveModel::Errors#messages
에서[]=
를 사용하는 deprecated된 지원이 제거되었습니다.Rails 5.x 에러 포맷의 Marshal과 YAML load 지원이 제거되었습니다.
Rails 5.x
ActiveModel::AttributeSet
포맷의 Marshal load 지원이 제거되었습니다.
10.2 Deprecation(지원 종료)
일반적으로 Rails는 즉각적인 업그레이드가 가능하도록 하기 위해, 애플리케이션에 지장을 주지 않는 방식으로 기능을 deprecate합니다. 설정이나 코드에 있는 deprecated된 호출이 있다면 알림이 표시되어, 새로운 방식으로 업데이트 할 수 있도록 합니다.
Deprecation 경고는 보통 다음 버전에서 해당 기능이 제거될 것임을 의미합니다. 예를 들어, Rails 7.0에서 deprecation 경고를 보게 된다면, 이는 Rails 7.1에서 해당 기능이 제거될 것임을 의미합니다.
Rails 7.1로 업그레이드하기 전에 Rails 7.0 애플리케이션에서 모든 deprecation 경고가 해결되었는지 확인해야 합니다.
config/environments/development.rb
와 config/environments/test.rb
에서 deprecation 경고를 활성화할 수 있습니다:
config.active_support.deprecation = :stderr
production 환경에서는 :log
로 설정하여 로그 파일에 deprecation 경고를 출력할 수 있습니다:
config.active_support.deprecation = :log
10.3 주목할 만한 변경사항
11 Active Support
자세한 변경사항은 Changelog를 참조하세요.
11.1 제거된 항목들
더 이상 사용되지 않는
config.active_support.use_sha1_digests
가 제거되었습니다.더 이상 사용되지 않는
URI.parser
가 제거되었습니다.datetime 범위에서 값의 포함 여부를 확인하기 위해
Range#include?
를 사용하는 더 이상 사용되지 않는 지원이 제거되었습니다.더 이상 사용되지 않는
ActiveSupport::Multibyte::Unicode.default_normalization_form
이 제거되었습니다.
11.2 Deprecations
Array
,Range
,Date
,DateTime
,Time
,BigDecimal
,Float
,Integer
에서#to_fs
를 대신 사용하도록#to_s
에 포맷을 전달하는 것을 Deprecate합니다.이 Deprecation은 Rails 애플리케이션이 특정 타입의 객체 보간을 더 빠르게 만드는 Ruby 3.1의 최적화를 활용할 수 있도록 하기 위한 것입니다.
새로운 애플리케이션에서는 해당 클래스들에서
#to_s
메서드가 오버라이드되지 않을 것이며, 기존 애플리케이션은config.active_support.disable_to_s_conversion
을 사용할 수 있습니다.
11.3 주요 변경사항
12 Active Job
자세한 변경사항은 Changelog를 참조하세요.
12.1 제거된 기능
이전 콜백이
throw :abort
로 중단되었을 때after_enqueue
/after_perform
콜백을 중단하지 않던 deprecated된 동작이 제거되었습니다.deprecated된
:return_false_on_aborted_enqueue
옵션이 제거되었습니다.
12.2 Deprecations
Rails.config.active_job.skip_after_callbacks_if_terminated
가 deprecated 되었습니다.
12.3 주요 변경사항
13 Action Text
자세한 변경사항은 Changelog를 참조하세요.
13.1 삭제
13.2 더 이상 사용되지 않는 기능들
ActiveRecord::Base#update_attributes
메서드와ActiveRecord::Base#update_attributes!
메서드는 더 이상 사용되지 않으며,ActiveRecord::Base#update
와ActiveRecord::Base#update!
로 각각 대체되었습니다.config.force_ssl
를 통해 cookie의 secure flag를 비활성화하는 것은 더 이상 사용되지 않습니다. 대신Rails.application.config.ssl_options
를 사용하세요.Ruby 2.3을 위한 지원이 더 이상 사용되지 않습니다.
Internet Explorer에 대한
ActionDispatch::Response#content_type
의 특별한 처리가 더 이상 사용되지 않습니다.Kernel#private_key
가 더 이상 사용되지 않으며,OpenSSL::PKey::RSA.new
를 사용하세요.같은 의미의
config.action_dispatch.tld_length
가 더 이상 사용되지 않으며,config.action_dispatch.hosts_response_app
이나config.hosts
를 사용하세요.ActionDispatch::IntegrationTest#host!
와ActionController::TestCase#host!
가 더 이상 사용되지 않으며, 대신@request.host=
를 사용하세요.
13.3 주목할만한 변경사항
14 Action Mailbox
자세한 변경사항은 Changelog를 참조하세요.
14.1 Removals
폐기 예정이었던
Rails.application.credentials.action_mailbox.mailgun_api_key
가 제거되었습니다.폐기 예정이었던 환경 변수
MAILGUN_INGRESS_API_KEY
가 제거되었습니다.
14.2 지원 중단
https://guides.rubyonrails.org/7_1_release_notes.html를 참조하여 Rails 7.1에서 지원이 중단된 기능의 전체 목록을 확인하세요.
14.3 주요 변경사항
15 Ruby on Rails 가이드
자세한 변경사항은 Changelog를 참조하세요.
15.1 주목할 만한 변경사항
16 크레딧
안정적이고 견고한 프레임워크인 Rails를 만들기 위해 많은 시간을 투자한 수많은 사람들은 Rails 기여자 전체 목록에서 확인할 수 있습니다. 모든 기여자분들께 큰 찬사를 보냅니다.