rubyonrails.org에서 더 보기:

1 Rails 8.0으로 업그레이드하기

기존 애플리케이션을 업그레이드하는 경우, 진행하기 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 아직 하지 않았다면 먼저 Rails 7.2로 업그레이드하고, Rails 8.0으로 업데이트를 시도하기 전에 애플리케이션이 예상대로 작동하는지 확인해야 합니다. 업그레이드 시 주의해야 할 사항 목록은 Ruby on Rails 업그레이드하기 가이드에서 확인할 수 있습니다.

2 주요 기능

3 Railties

자세한 변경 사항은 Changelog를 참조하세요.

3.1 제거사항

  • 더 이상 사용되지 않는 config.read_encrypted_secrets 제거.

  • 더 이상 사용되지 않는 rails/console/app 파일 제거.

  • 더 이상 사용되지 않는 rails/console/helpers 파일 제거.

  • Rails::ConsoleMethods를 통해 Rails console을 확장하는 더 이상 사용되지 않는 지원 제거.

3.2 지원 중단

Deprecating a feature gives users a chance to update their code before a change is made permanent. Features are deprecated by emitting a warning that includes a deprecation horizon: either the Rails version the feature will be removed in or a date.

한 기능의 지원을 중단하는 것은 변경사항이 영구적으로 이루어지기 전에 사용자들이 그들의 코드를 업데이트할 기회를 제공합니다. 각 기능들은 deprecation horizon을 포함하는 경고를 표시하면서 지원이 중단됩니다: 기능이 제거될 Rails 버전이나 날짜가 이에 해당합니다.

Deprecation horizons should be: - The next major release for feature removals - At least 2 major releases for syntax changes (since the syntax needs to be supported simultaneously during the deprecation cycle) - At least 3 major releases for API changes that would require significant refactoring - Based on a specific date for significant breaking changes (e.g. dropping support for an old version of Ruby)

지원 중단 기간은 다음과 같아야 합니다: - 기능이 제거되는 다음 주요 릴리스 - 문법 변경의 경우 최소 2개의 주요 릴리스(지원 중단 주기 동안 문법이 동시에 지원되어야 하기 때문) - 상당한 리팩토링이 필요한 API 변경의 경우 최소 3개의 주요 릴리스 - 중요한 변경사항의 경우 특정 날짜 기준(예: 오래된 Ruby 버전에 대한 지원 중단)

For example:

예시:

def old_method
  ActiveSupport::Deprecation.warn(
    "old_method is deprecated and will be removed from Rails #{Rails.version.to_f + 1.0}"
  )
  new_method
end

3.3 주목할 만한 변경사항

  • Regexp Denial-of-Service 공격에 대한 보안을 향상시키기 위해 Regexp.timeout을 기본값 1초로 설정했습니다.

4 Action Cable

자세한 변경사항은 Changelog를 참조하세요.

4.1 제거 옵션

The following modules are considered removed in Active Support:

다음 모듈들은 Active Support에서 제거된 것으로 간주됩니다:

  • Module#reachable? - 클래스와 모듈이 remove_const를 사용해서 제거될 수 있기 때문에, 이 메서드는 신뢰할 수 없어졌습니다.
  • Module#anonymous? - Ruby 내장 메서드인 Module#name을 대신 사용하세요.
  • ActiveSupport::LogSubscriber#silence - 더 이상 필요하지 않습니다.
  • ActiveSupport::LogSubscriber.flush_all! - 더 이상 필요하지 않습니다.
  • ActiveSupport::Dependencies.explicitly_unloadable_constants - 더 이상 필요하지 않습니다.

4.2 Deprecated(지원 중단 예정) 기능들

원본 문서

4.3 주목할 만한 변경사항

5 Action Pack

자세한 변경사항은 Changelog를 참조하세요.

5.1 제거사항

  • Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality 제거.

5.2 지원 중단 사항들

As of Rails 7.1, using nested arrays with the :allow_destroy option is deprecated:

Rails 7.1부터, :allow_destroy 옵션에서 중첩 배열을 사용하는 것이 지원 중단됩니다:

class Member < ActiveRecord::Base
  has_many :posts
  accepts_nested_attributes_for :posts, allow_destroy: [true, false]
end

You should now use a boolean value instead:

이제 boolean 값을 대신 사용해야 합니다:

class Member < ActiveRecord::Base
  has_many :posts
  accepts_nested_attributes_for :posts, allow_destroy: true
end

5.3 주요 변경 사항

6 Action View

자세한 변경 사항은 Changelog를 참조하세요.

6.1 제거사항

  • form_withmodel: 인자에 nil을 전달하는 deprecated된 지원을 제거했습니다.

  • tag 빌더에서 void tag 엘리먼트에 content를 전달하는 deprecated된 지원을 제거했습니다.

6.2 지원 중단 대상들 (Deprecations)

6.3 주목할 만한 변경사항

7 Action Mailer

자세한 변경사항은 Changelog를 참조하시기 바랍니다.

7.1 제거사항

  • Removed support for using unsafe raw SQL in the following query methods: select_rows, pluck, and ids. You can still use raw SQL by wrapping it in Arel.sql() to make it explicit that using raw SQL is intended and secure. CVE-2022-32224

  • 안전하지 않은 raw SQL을 다음의 query method에서 사용하는 것에 대한 지원이 제거되었습니다: select_rows, pluck, 그리고 ids. raw SQL을 의도적이고 안전하게 사용한다는 것을 명시적으로 표현하기 위해 Arel.sql()로 감싸서 raw SQL을 계속 사용할 수 있습니다. CVE-2022-32224

7.2 지원 종료(Deprecations)

7.3 주목할 만한 변경사항

8 Active Record

자세한 변경사항은 Changelog를 참조해주세요.

8.1 제거된 기능

  • deprecated된 config.active_record.commit_transaction_on_non_local_return 제거.

  • deprecated된 config.active_record.allow_deprecated_singular_associations_name 제거.

  • Active Record에 등록되지 않은 database adapter를 찾는 deprecated된 기능 제거.

  • keyword argument를 사용하여 enum을 정의하는 deprecated된 기능 제거.

  • deprecated된 config.active_record.warn_on_records_fetched_greater_than 제거.

  • deprecated된 config.active_record.sqlite3_deprecated_warning 제거.

  • deprecated된 ActiveRecord::ConnectionAdapters::ConnectionPool#connection 제거.

  • cache_dump_filename에 database 이름을 전달하는 deprecated된 기능 제거.

  • ENV["SCHEMA_CACHE"]를 설정하는 deprecated된 기능 제거.

8.2 지원 중단(Deprecations)

8.3 주요 변경사항

9 Active Storage

자세한 변경 사항은 Changelog를 참조하세요.

9.1 제거

9.2 기능 폐기(Deprecations)

9.3 주목할 만한 변경사항

10 Active Model

자세한 변경사항은 Changelog를 참조하세요.

10.1 제거

10.2 지원 중단 예정(Deprecations)

  • config.action_dispatch.return_only_media_type_on_content_type 구성이 Rails 7.1에서 제거될 예정입니다.
  • ActionController::Live 모듈의 #send_stream이 제거될 예정입니다. 대신 #send_stream_data를 사용하세요. [#47493]
  • Rails.application.middleware를 직접 수정하는 것이 제거될 예정입니다. 대신 config.middleware를 사용하세요. [#47615]
  • Application#default_middleware_stack=가 제거될 예정입니다. 대신 middleware의 상속을 허용하지 않으려면 config.load_defaults 7.1 없이 애플리케이션을 생성하세요. [#47615]

10.3 주목할 만한 변경사항

11 Active Support

자세한 변경사항은 Changelog를 참조하세요.

11.1 삭제된 기능

  • 더 이상 사용되지 않는 ActiveSupport::ProxyObject 제거.

  • 더 이상 사용되지 않는 @ 접두사를 사용한 attr_internal_naming_format 설정 지원 제거.

  • 더 이상 사용되지 않는 문자열 배열을 ActiveSupport::Deprecation#warn에 전달하는 기능 지원 제거.

11.2 Deprecations (지원 중단 예정)

  • config.after_initialize block을 통한 config.active_support.executor_around_test_case의 변경은 더 이상 지원되지 않습니다. config/initializers에서 이를 대신 구성하세요. (Pull Request)

  • 다중 --database에 대한 ENV['DATABASE_URL'] 사용은 더 이상 지원되지 않습니다. 데이터베이스 URL은 데이터베이스 설정 대신 ENV['PRIMARY_DATABASE_URL'], ENV['SECONDARY_DATABASE_URL'] 등을 사용해야 합니다. (Pull Request)

  • ActiveSupport::TimeWithZone.name에서 ActiveSupport::TimeZone.find_tzinfo를 호출하는 것은 더 이상 지원되지 않습니다. find_tzinfo는 이제 private입니다. (Pull Request)

  • Cache#fetch를 통한 race condition 방지는 더 이상 지원되지 않습니다. 새로운 Cache#fetch_multi를 사용하세요. (Pull Request)

  • 스탠드얼론(standalone) migration은 더 이상 지원되지 않습니다. 애플리케이션은 이제 rails/all 또는 active_record/railtie를 필요로 합니다. (Pull Request)

  • 숫자가 아닌 값의 round, floor, ceil은 더 이상 지원되지 않습니다. (Pull Request)

  • config.active_support.use_message_serializer의 기본값을 변경하는 것은 더 이상 지원되지 않습니다. 이 옵션은 Rails 7.1에서 제거될 예정입니다. (Pull Request)

  • Active Model의 format validator에서 :multiline 옵션은 더 이상 지원되지 않습니다. (Pull Request)

  • config.active_support.cache_format_version 2는 더 이상 지원되지 않습니다. 해당 옵션은 Rails 7.1에서 제거될 예정입니다. (Pull Request)

  • 일부 legacy connection handler 메소드는 더 이상 지원되지 않습니다. (Pull Request)

11.3 주목할 만한 변경사항

12 Active Job

자세한 변경사항은 Changelog를 참조하세요.

12.1 제거항목

  • 더 이상 사용되지 않는 config.active_job.use_big_decimal_serializer를 제거했습니다.

12.2 지원 중단(Deprecations)

12.3 주목할만한 변경사항

13 Action Text

자세한 변경사항은 Changelog를 참고하세요.

13.1 삭제하기

13.2 Deprecations (지원 중단 예정)

  • 더 이상 사용되지 않는 DatabaseLimits.validate_string_size_limit은 삭제될 예정입니다. 앞으로 string size validation이 항상 수행됩니다. DatabaseLimits.validate_string_size_limit = false를 설정하더라도 효과가 없습니다.

  • 더 이상 사용되지 않는 DatabaseLimits.string_size_limit은 삭제될 예정입니다.

  • 더 이상 사용되지 않는 Column.string_size_limit은 삭제될 예정입니다.

  • 더 이상 사용되지 않는 ActiveRecord::ConnectionAdapters::SchemaCache#data_source_exists?, #data_sources=, #data_sources 메서드들은 삭제될 예정입니다. 대신 #table_exists?, #tables=, #tables를 사용하세요.

  • 더 이상 사용되지 않는 DatabaseConfig#to_hash_config 메서드는 삭제될 예정입니다.

  • 더 이상 사용되지 않는 DatabaseConfig.render_as_hash 메서드는 삭제될 예정입니다.

13.3 주목할 만한 변경사항

14 Action Mailbox

자세한 변경사항은 Changelog를 참조하세요.

14.1 제거

  • assert_template/assert_select assertions를 rails-controller-testing gem으로 추출했습니다.

  • Action Pack의 xml parameters 파서를 제거했습니다. ActionDispatch::Request.parameter_parsers에서 xml 타입을 제거했습니다. XML 요청을 파싱하려면, parser를 다시 추가하셔야 합니다:

  ActionDispatch::Request.parameter_parsers[:xml] = -> (raw_post) {
    # Parser XML request여기에 구현
  }
  • Controller에서 redirect할 때 *_filter 메소드를 제거했습니다. *_action을 대신 사용하세요.

  • ActionController::Parameters 인스턴스에서 HashWithIndifferentAccess 메소드를 제거했습니다.

  • ActionController::Parameters#[]nil 값을 가진 키에 대해 빈 hash를 반환하지 않습니다.

  • respond_torespond_withresponders gem으로 추출했습니다. responders gem을 추가하세요.

  • Rails에서 jQuery가 기본으로 포함되었던 것을 제거했습니다. 필요하다면 jquery-rails gem을 추가하세요.

  • config.static_cache_control을 제거했습니다. 대신 config.public_file_server.headers를 사용하세요.

  • config.serve_static_files를 제거했습니다. 대신 config.public_file_server.enabled를 사용하세요.

  • Rails::Rack::LogTailer을 제거했습니다.

  • Extension없이 bin/rails 생성이 제거되었습니다.

  • debugger를 제거했습니다. 대신 byebug를 사용하세요.

  • doc:app, doc:rails, doc/app, doc/api를 제거했습니다.

  • rails application 명령을 제거했습니다.

  • Rack::ContentLength 미들웨어를 제거했습니다.

  • Rails 내의 모든 모듈에서 Rails::Application 상수를 제거했습니다.

  • 기본 Gemfile에서 Bundler.with_clean_env를 제거했습니다.

  • Active Record의 counter cache에서 sanitize_sql_hash_for_conditions를 제거했습니다.

  • UUID 생성 시의 :limit 옵션을 제거했습니다.

  • PostgreSQL adapter에서 :point 타입의 기본 nil 값을 제거했습니다.

  • connection_pool에서 prepared_statements를 제거했습니다. 대신 database.yml을 사용하세요.

  • ActiveRecord::Tasks::DatabaseTasks#load_schema에서 schema_migration_table_name 옵션을 제거했습니다.

  • Mime::LOOKUP를 제거했습니다. 대신 Mime[]를 사용하세요.

  • email_validator를 제거했습니다. 대신 메일박스 형식 검증 gem을 사용하세요.

  • Active Model의 callstack에서 deprecated error를 제거했습니다.

14.2 지원 중단(Deprecations)

  • ActionDispatch::Session::SessionRestoreError 예외는 Ruby 3.0과 Rails 7.0에서 더 이상 지원하지 않습니다. [Rack::Session::Unpacker::MarshalErrorJSON::ParserError]가 대신 발생할 것입니다. Gem이나 애플리케이션에서 이 예외를 rescue하고 있다면, 이 새로운 예외들도 같이 rescue하도록 업데이트해야 합니다. GH#43953

  • Redis Session Store가 더 이상 내부적으로 Marshal을 사용하지 않을 것입니다. GH#44379

  • FileStore와 MemoryStore에서 기본 serializer로 Marshal을 사용하는 것이 지원 중단됩니다. GH#44379

  • expire_after를 인스턴스 수준에서 지원하는 것이 지원 중단됩니다. Session#options에서 대신 이를 설정하세요. GH#44379

14.3 주목할만한 변경사항

15 Ruby on Rails 가이드

자세한 변경사항은 Changelog를 참조하세요.

15.1 주목할 만한 변경사항

16 감사의 말

Rails를 안정적이고 견고한 프레임워크로 만들기 위해 수많은 시간을 투자한 많은 사람들을 보려면 Rails 전체 기여자 목록을 참조하세요. 이 모든 분들께 경의를 표합니다.



맨 위로