Rails 애플리케이션 구성하기

이 가이드는 Rails 애플리케이션에서 사용할 수 있는 구성 및 초기화 기능을 다룹니다.

이 가이드를 읽고 나면 다음을 알 수 있습니다:

  • Rails 애플리케이션의 동작을 조정하는 방법.
  • 애플리케이션 시작 시 실행할 추가 코드를 추가하는 방법.

초기화 코드 위치

Rails에는 초기화 코드를 배치할 수 있는 네 가지 표준 위치가 있습니다:

  • config/application.rb
  • 환경별 구성 파일
  • 초기화기
  • 후기 초기화기

Rails 시작 전 코드 실행

애플리케이션에서 Rails 자체가 로드되기 전에 코드를 실행해야 하는 경우는 매우 드물지만, config/application.rb에서 require "rails/all"보다 앞에 배치하면 됩니다.

Rails 구성 요소 구성하기

일반적으로 Rails 구성이란 Rails 자체와 Rails의 구성 요소를 구성하는 것을 의미합니다. config/application.rb 파일과 환경별 구성 파일(예: config/environments/production.rb)을 통해 모든 구성 요소에 전달할 다양한 설정을 지정할 수 있습니다.

예를 들어 다음과 같이 config/application.rb 파일에 설정을 추가할 수 있습니다:

config.time_zone = 'Central Time (US & Canada)'

이것은 Rails 자체에 대한 설정입니다. 개별 Rails 구성 요소에 설정을 전달하려면 config/application.rb에서 동일한 config 객체를 사용하면 됩니다:

config.active_record.schema_format = :ruby

Rails는 이 특정 설정을 사용하여 Active Record를 구성합니다.

경고: 클래스를 직접 호출하는 대신 공개 구성 메서드를 사용하세요. 예를 들어 ActionMailer::Base.options 대신 Rails.application.config.action_mailer.options를 사용하세요.

참고: 클래스에 직접 구성을 적용해야 하는 경우, 초기화기에서 지연 로드 후크를 사용하여 초기화가 완료되기 전에 클래스가 자동 로드되지 않도록 하세요. 그렇지 않으면 초기화 중에 자동 로드를 안전하게 반복할 수 없어 문제가 발생합니다.

버전화된 기본값

[config.load_defaults] 는 대상 버전과 이전 모든 버전에 대한 기본 구성 값을 로드합니다. 예를 들어 config.load_defaults 6.1은 6.1 버전 이하의 모든 버전에 대한 기본값을 로드합니다.

아래는 각 대상 버전에 대한 기본값입니다. 값이 충돌하는 경우 최신 버전이 우선합니다.

대상 버전 7.2의 기본값

대상 버전 7.1의 기본값

대상 버전 7.0의 기본값

대상 버전 6.1의 기본값

대상 버전 6.0의 기본값

대상 버전 5.2의 기본값

대상 버전 5.1의 기본값

대상 버전 5.0의 기본값

  • [`config네, 계속해서 번역하겠습니다.

대상 버전 5.0의 기본값

Rails 일반 구성

다음 구성 메서드는 Rails::Railtie 객체, 즉 Rails::Engine 또는 Rails::Application의 하위 클래스에서 호출해야 합니다.

config.add_autoload_paths_to_load_path

자동 로드 경로를 $LOAD_PATH에 추가할지 여부를 지정합니다. :zeitwerk 모드에서 초기에 config/application.rbfalse로 설정하는 것이 좋습니다. Zeitwerk는 내부적으로 절대 경로를 사용하며, :zeitwerk 모드의 애플리케이션은 require_dependency를 사용할 필요가 없으므로 모델, 컨트롤러, 작업 등이 $LOAD_PATH에 있을 필요가 없습니다. 이 값을 false로 설정하면 상대 경로의 require 호출을 확인할 때 Ruby가 이러한 디렉토리를 확인할 필요가 없어 Bootsnap의 작업과 RAM 사용량이 줄어듭니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) true
7.1 false

lib 디렉토리는 이 플래그의 영향을 받지 않으며, 항상 $LOAD_PATH에 추가됩니다.

config.after_initialize

Rails가 애플리케이션 초기화를 완료한 후 실행할 블록을 지정합니다. 여기에는 프레임워크 자체, 엔진, 그리고 config/initializers의 모든 애플리케이션 초기화기 초기화가 포함됩니다. 이 블록은 rake 작업에서도 실행됩니다. 다른 초기화기에 의해 설정된 값을 구성하는 데 유용합니다:

config.after_initialize do
  ActionView::Base.sanitized_allowed_tags.delete 'div'
end

config.after_routes_loaded

Rails가 애플리케이션 경로 로드를 완료한 후 실행할 블록을 지정합니다. 이 블록은 경로가 다시 로드될 때마다 실행됩니다.

config.after_routes_loaded do
  # Rails.application.routes를 사용하는 코드
end

config.allow_concurrency

요청을 동시에 처리할지 여부를 제어합니다. 애플리케이션 코드가 스레드 안전하지 않은 경우에만 false로 설정해야 합니다. 기본값은 true입니다.

config.asset_host

자산의 호스트를 설정합니다. CDN을 사용하여 자산을 호스팅하거나 브라우저의 동시성 제약을 우회하려는 경우 유용합니다. config.action_controller.asset_host의 간단한 버전입니다.

config.assume_ssl

애플리케이션이 모든 요청이 SSL을 통해 도착한다고 믿도록 합니다. 로드 밸런서가 SSL을 종료하고 전달된 요청이 애플리케이션에 HTTP 대신 HTTPS로 보이는 경우 유용합니다. 이렇게 하면 리디렉션과 쿠키 보안이 HTTP 대신 HTTPS를 대상으로 합니다. 이 미들웨어는 프록시가 이미 SSL을 종료했고 요청이 실제로 HTTPS라고 가정합니다.

config.autoflush_log

로그 파일 출력을 즉시 기록하도록 합니다. 기본값은 true입니다.

config.autoload_lib(ignore:)

이 메서드는 config.autoload_pathsconfig.eager_load_pathslib를 추가합니다.

일반적으로 lib 디렉토리에는 자동 로드 또는 적극적 로드되지 않아야 하는 하위 디렉토리가 있습니다. 필수 ignore 키워드 인수에 해당 이름을 상대 경로로 전달하세요. 예를 들어

config.autoload_lib(ignore: %w(assets tasks generators))

자세한 내용은 자동 로드 가이드를 참조하세요.

config.autoload_lib_once(ignore:)

config.autoload_lib_once 메서드는 config.autoload_lib와 유사하지만 config.autoload_once_pathslib를 추가합니다.

config.autoload_lib_once를 호출하면 애플리케이션 초기화기에서도 lib의 클래스와 모듈을 자동 로드할 수 있지만 다시 로드되지 않습니다.

config.autoload_once_paths

Rails가 요청별로 삭제되지 않는 상수를 자동 로드할 수 있는 경로 배열입니다. 기본적으로 재로드가 활성화되는 development 환경에서만 관련이 있습니다. 그렇지 않으면 모든 자동 로드가 한 번만 발생합니다. 이 배열의 모든 요소는 autoload_paths에도 있어야 합니다. 기본값은 빈 배열입니다.

config.autoload_paths

Rails가 상수를 자동 로드할 수 있는 경로 배열입니다. 기본값은 빈 배열입니다. Rails 6부터는 이 설정을 조정하는 것이 권장되지 않습니다. 자동 로드 및 재로드 상수를 참조하세요.

config.beginning_of_week

애플리케이션의 기본 주 시작일을 설정합니다. 유효한 요일 기호(예: :monday)를 사용할 수 있습니다.

config.cache_classes

!config.enable_reloading과 동등한 오래된 설정입니다. 호환성을 위해 지원됩니다.

config.cache_store

Rails 캐싱에 사용할 캐시 저장소를 구성합니다. :memory_store, :file_store, :mem_cache_store, :null_store, :redis_cache_store 기호 중 하나 또는 캐시 API를 구현하는 객체를 사용할 수 있습니다. 기본값은 :file_store입니다. 각 저장소에 대한 구성 옵션은 캐시 저장소를 참조하세요.

config.colorize_logging

로그 정보에 ANSI 색상 코드를 사용할지 여부를 지정합니다. 기본값은 true입니다.

config.consider_all_requests_local

플래그입니다. true이면 오류가 발생할 때마다 HTTP 응답에 자세한 디버깅 정보가 표시되고 Rails::Info 컨트롤러가 /rails/info/properties에서 애플리케이션 런타임 컨텍스트를 표시합니다. 개발 및 테스트 환경에서는 기본값이 true이고 프로덕션에서는 false입니다. 더 세부적인 제어가 필요한 경우 이 값을 false로 설정하고 컨트롤러에서 show_detailed_exceptions?를 구현하여 어떤 요청에 디버깅 정보를 제공할지 지정할 수 있습니다.

config.console

콘솔을 실행할 때 사용할 클래스를 설정할 수 있습니다. console 블록에서 실행하는 것이 가장 좋습니다:

console do
  # 이 블록은 콘솔을 실행할 때만 호출되므로 여기서 pry를 안전하게 요구할 수 있습니다
  require "pry"
  config.console = Pry
end

config.content_security_policy_nonce_directives

Nonce 추가에 대한 보안 가이드를 참조하세요.

config.content_security_policy_nonce_generator

Nonce 추가에 대한 보안 가이드를 참조하세요.

config.content_security_policy_report_only

위반 보고에 대한 보안 가이드를 참조하세요.

config.credentials.content_path

암호화된 자격 증명 파일의 경로입니다.

기본값은 config/credentials/#{Rails.env}.yml.enc가 존재하는 경우 해당 파일, 그렇지 않으면 config/credentials.yml.enc입니다.

참고: bin/rails credentials 명령이 이 값을 인식하려면 config/application.rb 또는 config/environments/#{Rails.env}.rb에 설정해야 합니다.

config.credentials.key_path

암호화된 자격 증명 키 파일의 경로입니다.

기본값은 config/credentials/#{Rails.env}.key가 존재하는 경우 해당 파일, 그렇지 않으면 config/master.key입니다.

참고: bin/rails credentials 명령이 이 값을 인식하려면 config/application.rb 또는 config/environments/#{Rails.env}.rb에 설정해야 합니다.

config.debug_exception_response_format

개발 환경에서 오류 발생 시 응답 형식을 설정합니다. API 전용 앱의 경우 기본값은 :api이고, 일반 앱의 경우 기본값은 :default입니다.

config.disable_sandbox

콘솔에서 샌드박스 모드를 시작할 수 있는지 여부를 제어합니다. 이는 데이터베이스 서버가 메모리를 소진하지 않도록 하는 데 도움이 됩니다. 기본값은 false입니다.

config.dom_testing_default_html_version

Action View, Action Dispatch 및 rails-dom-testing의 테스트 헬퍼가 기본적으로 사용하는 HTML4 파서 또는 HTML5 파서를 제어합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :html4
7.1 :html5 (참고 참조)

참고: Nokogiri의 HTML5 파서는 JRuby에서 지원되지 않으므로 Rails는 JRuby 플랫폼에서 :html4로 대체됩니다.

config.eager_load

true이면 등록된 config.eager_load_namespaces를 모두 적극적으로 로드합니다. 여기에는 애플리케이션, 엔진, Rails 프레임워크 및 기타 등록된 네임스페이스가 포함됩니다.

config.eager_load_namespaces

config.eager_loadtrue로 설정되면 적극적으로 로드할 네임스페이스를 등록합니다. 목록의 모든 네임스페이스는 eager_load! 메서드에 응답해야 합니다.

config.eager_load_paths

Rails가 config.eager_loadtrue이면 부트 시 적극적으로 로드할 경로 배열입니다. 기본값은 애플리케이션의 app 디렉토리의 모든 폴더입니다.

config.enable_reloading

config.enable_reloadingtrue이면 애플리케이션 클래스와 모듈이 변경되면 웹 요청 사이에 다시 로드됩니다. 기본값은 development 환경에서 true, production 환경에서 false입니다.

`config.reloading네, 계속해서 번역하겠습니다.

config.encoding

애플리케이션 전체의 인코딩을 설정합니다. 기본값은 UTF-8입니다.

config.exceptions_app

ShowException 미들웨어가 예외가 발생할 때 호출하는 예외 애플리케이션을 설정합니다. 기본값은 ActionDispatch::PublicExceptions.new(Rails.public_path)입니다.

예외 애플리케이션은 ActionDispatch::Http::MimeNegotiation::InvalidType 오류를 처리해야 합니다. 이 오류는 클라이언트가 잘못된 Accept 또는 Content-Type 헤더를 보낼 때 발생합니다. 기본 ActionDispatch::PublicExceptions 애플리케이션은 이를 자동으로 처리하여 Content-Typetext/html로 설정하고 406 Not Acceptable 상태를 반환합니다. 이 오류를 처리하지 않으면 500 Internal Server Error가 발생합니다.

Rails.application.routes RouteSet을 예외 애플리케이션으로 사용하려면 이 특별한 처리가 필요합니다. 다음과 같이 구현할 수 있습니다:

# config/application.rb
config.exceptions_app = CustomExceptionsAppWrapper.new(exceptions_app: routes)

# lib/custom_exceptions_app_wrapper.rb
class CustomExceptionsAppWrapper
  def initialize(exceptions_app:)
    @exceptions_app = exceptions_app
  end

  def call(env)
    request = ActionDispatch::Request.new(env)

    fallback_to_html_format_if_invalid_mime_type(request)

    @exceptions_app.call(env)
  end

  private
    def fallback_to_html_format_if_invalid_mime_type(request)
      request.formats
    rescue ActionDispatch::Http::MimeNegotiation::InvalidType
      request.set_header "CONTENT_TYPE", "text/html"
    end
end

config.file_watcher

config.reload_classes_only_on_changetrue이면 파일 시스템의 파일 업데이트를 감지하는 데 사용되는 클래스입니다. Rails에는 기본적으로 ActiveSupport::FileUpdateCheckerActiveSupport::EventedFileUpdateChecker(이 경우 listen gem에 의존)가 포함되어 있습니다. 사용자 정의 클래스는 ActiveSupport::FileUpdateChecker API를 준수해야 합니다.

config.filter_parameters

로그에 표시하고 싶지 않은 매개변수(예: 비밀번호 또는 신용카드 번호)를 필터링하는 데 사용됩니다. 또한 Active Record 객체의 #inspect를 호출할 때 데이터베이스 열의 중요한 값을 필터링합니다. 기본적으로 Rails는 다음과 같은 필터를 config/initializers/filter_parameter_logging.rb에 추가합니다.

Rails.application.config.filter_parameters += [
  :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]

매개변수 필터는 부분 일치 정규식으로 작동합니다.

config.filter_redirect

애플리케이션 로그에서 리디렉션 URL을 필터링하는 데 사용됩니다.

Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]

리디렉션 필터는 URL에 문자열이 포함되거나 정규식과 일치하는지 테스트하여 작동합니다.

config.force_ssl

모든 요청이 HTTPS를 통해 제공되도록 강제하고, URL을 생성할 때 “https://"를 기본 프로토콜로 설정합니다. HTTPS 적용은 ActionDispatch::SSL 미들웨어에 의해 처리되며, config.ssl_options를 통해 구성할 수 있습니다.

config.host_authorization

HostAuthorization 미들웨어를 구성하는 옵션 해시를 허용합니다.

config.hosts

Host 헤더를 검증하는 데 사용되는 문자열, 정규식 또는 IPAddr 배열입니다. HostAuthorization 미들웨어에서 DNS 리바인딩 공격을 방지하는 데 사용됩니다.

config.javascript_path

앱의 JavaScript가 app 디렉토리 대비 상대적으로 있는 경로를 설정합니다. 기본값은 javascript입니다. 앱의 구성된 javascript_pathautoload_paths에서 제외됩니다.

config.log_file_size

Rails 로그 파일의 최대 크기(바이트)를 정의합니다. 개발 및 테스트 환경에서는 기본값이 104_857_600(100MiB)이고, 다른 모든 환경에서는 무제한입니다.

config.log_formatter

Rails 로거의 형식을 정의합니다. 이 옵션의 기본값은 모든 환경에서 ActiveSupport::Logger::SimpleFormatter의 인스턴스입니다. config.logger 값을 설정하는 경우 로거에 형식기를 수동으로 전달해야 합니다. Rails는 이를 대신 수행하지 않습니다.

config.log_level

Rails 로거의 자세한 정도를 정의합니다. 프로덕션 환경을 제외한 모든 환경의 기본값은 :debug이고, 프로덕션 환경의 기본값은 :info입니다. 사용 가능한 로그 수준은 :debug, :info, :warn, :error, :fatal, :unknown입니다.

config.log_tags

request 객체가 응답하는 메서드 목록, request 객체를 받는 Proc, 또는 to_s에 응답하는 무언가를 허용합니다. 이를 통해 하위 도메인 및 요청 ID와 같은 디버그 정보를 로그 줄에 태그할 수 있습니다. 이는 다중 사용자 프로덕션 애플리케이션 디버깅에 매우 유용합니다.

config.logger

Rails.logger 및 관련 Rails 로깅(예: ActiveRecord::Base.logger)에 사용되는 로거입니다. 기본적으로 로그를 log/ 디렉토리에 출력하는 ActiveSupport::TaggedLogging의 인스턴스를 감싸는 ActiveSupport::Logger의 인스턴스입니다. 사용자 정의 로거를 제공할 수 있지만, 완전한 호환성을 위해서는 다음 지침을 따라야 합니다:

  • 형식기를 지원하려면 config.log_formatter 값을 로거에 수동으로 할당해야 합니다.
  • 태그된 로그를 지원하려면 로그 인스턴스를 ActiveSupport::TaggedLogging으로 래핑해야 합니다.
  • 침묵을 지원하려면 로거에 ActiveSupport::LoggerSilence 모듈을 포함해야 합니다. ActiveSupport::Logger 클래스는 이러한 모듈을 이미 포함합니다.
class MyLogger < ::Logger
  include ActiveSupport::LoggerSilence
end

mylogger           = MyLogger.new(STDOUT)
mylogger.formatter = config.log_formatter
config.logger      = ActiveSupport::TaggedLogging.new(mylogger)

config.middleware

애플리케이션의 미들웨어를 구성할 수 있습니다. 이 부분은 미들웨어 구성 섹션에서 자세히 다룹니다.

config.precompile_filter_parameters

true이면 config.filter_parametersActiveSupport::ParameterFilter.precompile_filters를 사용하여 미리 컴파일합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.1 true

config.public_file_server.enabled

Rails가 공용 디렉토리에서 정적 파일을 제공할지 여부를 구성합니다. 기본값은 true입니다.

서버 소프트웨어(예: NGINX 또는 Apache)가 정적 파일을 제공해야 하는 경우 이 값을 false로 설정하세요.

config.railties_order

Railties/엔진의 로드 순서를 수동으로 지정할 수 있습니다. 기본값은 [:all]입니다.

config.railties_order = [Blog::Engine, :main_app, :all]

config.rake_eager_load

true이면 Rake 작업을 실행할 때 애플리케이션을 적극적으로 로드합니다. 기본값은 false입니다.

config.read_encrypted_secrets

사용되지 않음: 자격 증명을 사용해야 합니다.

true이면 config/secrets.yml.enc에서 암호화된 비밀을 읽으려고 시도합니다.

config.relative_url_root

하위 디렉토리에 배포할 때 사용할 수 있습니다. 기본값은 ENV['RAILS_RELATIVE_URL_ROOT']입니다.

config.reload_classes_only_on_change

클래스 재로드를 추적된 파일 변경 시에만 활성화할지 여부를 제어합니다. 기본적으로 자동 로드 경로의 모든 항목을 추적하며 true로 설정됩니다. config.enable_reloadingfalse이면 이 옵션이 무시됩니다.

config.require_master_key

마스터 키를 ENV["RAILS_MASTER_KEY"] 또는 config/master.key 파일을 통해 사용할 수 없는 경우 애플리케이션이 부팅되지 않도록 합니다.

config.sandbox_by_default

true이면 rails 콘솔이 기본적으로 샌드박스 모드로 시작됩니다. 비 샌드박스 모드로 시작하려면 --no-sandbox를 지정해야 합니다. 이는 실수로 프로덕션 데이터베이스에 쓰는 것을 방지하는 데 도움이 됩니다. 기본값은 false입니다.

config.secret_key_base

애플리케이션 키 생성기의 입력 비밀에 대한 대체 옵션입니다. config/credentials.yml.encsecret_key_base를 지정하는 것이 좋습니다. secret_key_base API 문서를 참조하여 다른 구성 방법을 확인하세요.

config.server_timing

true이면 ServerTiming 미들웨어를 미들웨어 스택에 추가합니다. 기본값은 false이지만 기본 생성된 config/environments/development.rb 파일에서는 true로 설정됩니다.

config.session_options

config.session_store를 설정할 때 전달되는 추가 옵션입니다. 직접 수정하는 대신 config.session_store를 사용해야 합니다.

config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}

config.session_store

세션을 저장할 클래스를 지정합니다. 가능한 값은 :cache_store, :cookie_store, :mem_cache_store, 사용자 정의 저장소 또는 :disabled입니다. :disabled는 Rails가 세션을 처리하지 않도록 합니다.

이 설정은 일반 메서드 호출을 통해 구성되며, 추가 옵션을 전달할 수 있습니다:

config.session_store :cookie_store, key: "_your_app_session"

사용자 정의 저장소가 기호로네, 계속해서 번역하겠습니다.

config.session_store

지정된 경우 ActionDispatch::Session 네임스페이스에 해당 저장소가 확인됩니다:

# ActionDispatch::Session::MyCustomStore를 세션 저장소로 사용
config.session_store :my_custom_store

기본 저장소는 애플리케이션 이름을 세션 키로 사용하는 쿠키 저장소입니다.

config.ssl_options

ActionDispatch::SSL 미들웨어에 대한 구성 옵션입니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) {}
5.0 { hsts: { subdomains: true } }

config.time_zone

애플리케이션의 기본 시간대를 설정하고 Active Record에 대한 시간대 인식을 활성화합니다.

config.x

애플리케이션 구성 객체에 중첩된 사용자 정의 구성을 쉽게 추가하는 데 사용됩니다

  config.x.payment_processing.schedule = :daily
  Rails.configuration.x.payment_processing.schedule # => :daily

사용자 정의 구성을 참조하세요.

자산 구성

config.assets.css_compressor

사용할 CSS 압축기를 정의합니다. 기본적으로 sass-rails에 의해 설정됩니다. 현재 유일한 대체 값은 :yui이며 yui-compressor gem을 사용합니다.

config.assets.js_compressor

사용할 JavaScript 압축기를 정의합니다. 가능한 값은 :terser, :closure, :uglifier, :yui이며 각각 terser, closure-compiler, uglifier, yui-compressor gem을 사용합니다.

config.assets.gzip

압축되지 않은 자산과 함께 컴파일된 자산의 gzipped 버전을 생성하는 플래그입니다. 기본값은 true입니다.

config.assets.paths

자산을 찾는 데 사용되는 경로를 포함합니다. 이 구성 옵션에 경로를 추가하면 해당 경로가 자산 검색에 사용됩니다.

config.assets.precompile

bin/rails assets:precompile를 실행할 때 application.cssapplication.js 외에 사전 컴파일할 추가 자산을 지정할 수 있습니다.

config.assets.unknown_asset_fallback

sprockets-rails 3.2.0 이상을 사용하는 경우 파이프라인에 없는 자산에 대한 자산 파이프라인의 동작을 수정할 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) true
5.1 false

config.assets.prefix

자산이 제공되는 접두사를 정의합니다. 기본값은 /assets입니다.

config.assets.manifest

자산 프리컴파일러의 매니페스트 파일에 대한 전체 경로를 정의합니다. 기본값은 공용 폴더의 config.assets.prefix 디렉토리에 있는 manifest-<random>.json이라는 파일입니다.

config.assets.digest

자산 이름에 SHA256 지문을 사용하도록 합니다. 기본값은 true입니다.

config.assets.debug

자산 연결 및 압축을 비활성화합니다. development.rb에서 기본값은 true입니다.

config.assets.version

SHA256 해시 생성에 사용되는 옵션 문자열입니다. 모든 파일을 다시 컴파일하도록 이 값을 변경할 수 있습니다.

config.assets.compile

프로덕션에서 라이브 Sprockets 컴파일을 활성화할지 여부를 지정하는 부울입니다.

config.assets.logger

Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 허용합니다. 기본값은 config.logger에서 설정한 것과 동일합니다. config.assets.loggerfalse로 설정하면 제공된 자산 로깅이 비활성화됩니다.

config.assets.quiet

자산 요청 로깅을 비활성화합니다. development.rb에서 기본값은 true입니다.

생성기 구성

Rails에서는 config.generators 메서드를 사용하여 사용할 생성기를 변경할 수 있습니다. 이 메서드는 블록을 사용합니다:

config.generators do |g|
  g.orm :active_record
  g.test_framework :test_unit
end

이 블록에서 사용할 수 있는 전체 메서드 집합은 다음과 같습니다:

  • force_plural은 복수형 모델 이름을 허용합니다. 기본값은 false입니다.
  • helper는 헬퍼를 생성할지 여부를 정의합니다. 기본값은 true입니다.
  • integration_tool은 통합 테스트를 생성할 때 사용할 통합 도구를 정의합니다. 기본값은 :test_unit입니다.
  • system_tests는 시스템 테스트를 생성할 때 사용할 통합 도구를 정의합니다. 기본값은 :test_unit입니다.
  • orm은 사용할 ORM을 정의합니다. 기본값은 false이며 기본적으로 Active Record를 사용합니다.
  • resource_controllerbin/rails generate resource를 사용할 때 컨트롤러를 생성할 생성기를 정의합니다. 기본값은 :controller입니다.
  • resource_route는 리소스 경로 정의가 생성되어야 하는지 여부를 정의합니다. 기본값은 true입니다.
  • scaffold_controllerbin/rails generate scaffold를 사용할 때 스캐폴드 컨트롤러를 생성할 생성기를 정의합니다. 기본값은 :scaffold_controller입니다.
  • test_framework은 사용할 테스트 프레임워크를 정의합니다. 기본값은 false이며 기본적으로 minitest를 사용합니다.
  • template_engine은 사용할 템플릿 엔진(예: ERB 또는 Haml)을 정의합니다. 기본값은 :erb입니다.
  • apply_rubocop_autocorrect_after_generate!은 Rails 생성기 실행 후 RuboCop의 자동 수정 기능을 적용합니다.

미들웨어 구성

모든 Rails 애플리케이션에는 개발 환경에서 이 순서로 사용되는 표준 미들웨어 집합이 있습니다:

ActionDispatch::HostAuthorization

DNS 리바인딩 및 기타 Host 헤더 공격을 방지합니다. 기본적으로 개발 환경에 포함되며 다음과 같은 구성이 적용됩니다:

Rails.application.config.hosts = [
  IPAddr.new("0.0.0.0/0"),        # 모든 IPv4 주소.
  IPAddr.new("::/0"),             # 모든 IPv6 주소.
  "localhost",                    # localhost 예약 도메인.
  ENV["RAILS_DEVELOPMENT_HOSTS"]  # 개발을 위한 추가 쉼표로 구분된 호스트.
]

다른 환경에서 Rails.application.config.hosts는 비어 있으며 Host 헤더 검사가 수행되지 않습니다. 프로덕션에서 헤더 공격을 방지하려면 허용된 호스트를 수동으로 허용해야 합니다.

Rails.application.config.hosts << "product.com"

요청의 호스트는 #=== 연산자를 사용하여 hosts 항목과 비교되며, 이를 통해 hostsRegexp, ProcIPAddr과 같은 항목을 지원할 수 있습니다. 정규식 예:

# `www.product.com` 및 `beta1.product.com`과 같은 하위 도메인 허용
Rails.application.config.hosts << /.*\.product\.com/

제공된 정규식은 전체 호스트 이름과 일치하도록 앵커(\A\z)로 래핑됩니다. 따라서 /product.com/과 같은 정규식은 www.product.com과 일치하지 않습니다.

모든 하위 도메인을 허용하는 특별한 경우가 지원됩니다:

# `www.product.com` 및 `beta1.product.com`과 같은 하위 도메인 허용
Rails.application.config.hosts << ".product.com"

특정 요청을 호스트 검사에서 제외하려면 config.host_authorization.exclude를 설정할 수 있습니다:

# /healthcheck/ 경로의 요청을 호스트 검사에서 제외
Rails.application.config.host_authorization = {
  exclude: ->(request) { request.path.include?('healthcheck') }
}

승인되지 않은 호스트로 요청이 오면 기본 Rack 애플리케이션이 실행되어 403 Forbidden으로 응답합니다. 이는 config.host_authorization.response_app를 설정하여 사용자 정의할 수 있습니다. 예:

Rails.application.config.host_authorization = {
  response_app: -> env do
    [400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
  end
}

ActionDispatch::ServerTiming

응답에 Server-Timing 헤더를 추가하여 서버 성능 지표를 포함합니다. 이 데이터는 브라우저의 개발자 도구 Network 패널에서 응답을 검사하여 볼 수 있습니다. 대부분의 브라우저는 Timing 탭을 제공하여 데이터를 시각화합니다.

ActionDispatch::SSL

모든 요청이 HTTPS를 통해 제공되도록 강제합니다. config.force_ssltrue로 설정된 경우 활성화됩니다. 이 옵션은 config.ssl_options를 통해 구성할 수 있습니다.

ActionDispatch::Static

정적 자산을 제공하는 데 사용됩니다. config.public_file_server.enabledfalse이면 비활성화됩니다. 디렉토리 요청에 index.html 대신 main.html을 제공하려면 config.public_file_server.index_name"main"으로 설정하세요.

ActionDispatch::Executor

스레드 안전 코드 재로드를 허용합니다. config.allow_concurrencyfalse이면 비활성화되며, Rack::Lock이 로드됩니다. Rack::Lock은 앱을 뮤텍스로 래핑하여 한 번에 한 스레드만 호출할 수 있습니다.

ActiveSupport::Cache::Strategy::LocalCache

기본 메모리 기반 캐시로 사용됩니다. 이 캐시는 스레드 안전하지 않으며 단일 스레드에 대한 임시 메모리 캐시로만 사용하는 것이 목적입니다.

Rack::Runtime

요청 실행 시간(초)을 포함하는 X-Runtime 헤더를 설정합니다.

Rails::Rack::Logger

요청이 시작되었음을 로그에 알립니다. 요청이 완료되면 모든 로그를 플러시합니다.

ActionDispatch::ShowExceptions

애플리케이션에서 반환된 모든 예외를 처리하고, 요청이 로컬이거나 config.consider_all_requests_localtrue이면 예외 페이지를 렌더링합니다. config.action_dispatch.show_exceptions:none으로 설정된 경우 예외가 발네, 계속해서 번역하겠습니다.

ActionDispatch::ShowExceptions

생됩니다.

ActionDispatch::RequestId

응답에 고유한 X-Request-Id 헤더를 사용할 수 있게 하고 ActionDispatch::Request#uuid 메서드를 활성화합니다. config.action_dispatch.request_id_header로 구성할 수 있습니다.

ActionDispatch::RemoteIp

IP 스푸핑 공격을 확인하고 요청 헤더에서 유효한 client_ip를 가져옵니다. config.action_dispatch.ip_spoofing_checkconfig.action_dispatch.trusted_proxies 옵션으로 구성할 수 있습니다.

Rack::Sendfile

파일에서 제공되는 응답 본문을 서버별 X-Sendfile 헤더로 대체합니다. config.action_dispatch.x_sendfile_header로 구성할 수 있습니다.

ActionDispatch::Callbacks

요청을 제공하기 전에 준비 콜백을 실행합니다.

ActionDispatch::Cookies

요청에 쿠키를 설정합니다.

ActionDispatch::Session::CookieStore

세션을 쿠키에 저장합니다. config.session_store를 다른 미들웨어로 변경할 수 있습니다.

ActionDispatch::Flash

flash 키를 설정합니다. config.session_store가 값으로 설정된 경우에만 사용할 수 있습니다.

Rack::MethodOverride

params[:_method]가 설정된 경우 메서드를 재정의할 수 있습니다. PATCH, PUT 및 DELETE HTTP 메서드 유형을 지원하는 미들웨어입니다.

Rack::Head

모든 HEAD 요청에 대해 빈 본문을 반환합니다. 다른 모든 요청은 변경되지 않습니다.

사용자 정의 미들웨어 추가

이러한 일반적인 미들웨어 외에도 config.middleware.use 메서드를 사용하여 자체 미들웨어를 추가할 수 있습니다:

config.middleware.use Magical::Unicorns

이렇게 하면 Magical::Unicorns 미들웨어가 스택의 끝에 배치됩니다. insert_before를 사용하여 다른 미들웨어 앞에 추가할 수도 있습니다.

config.middleware.insert_before Rack::Head, Magical::Unicorns

또는 인덱스를 사용하여 정확한 위치에 미들웨어를 삽입할 수 있습니다. 예를 들어 Magical::Unicorns 미들웨어를 스택의 맨 위에 삽입하려면 다음과 같이 할 수 있습니다:

config.middleware.insert_before 0, Magical::Unicorns

insert_after도 있어 다른 미들웨어 뒤에 삽입할 수 있습니다:

config.middleware.insert_after Rack::Head, Magical::Unicorns

미들웨어는 완전히 교체되어 다른 것으로 바뀔 수도 있습니다:

config.middleware.swap ActionController::Failsafe, Lifo::Failsafe

미들웨어는 한 위치에서 다른 위치로 이동할 수도 있습니다:

config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns

이렇게 하면 Magical::Unicorns 미들웨어가 ActionDispatch::Flash 앞으로 이동합니다. move_after를 사용하여 뒤로 이동할 수도 있습니다:

config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns

완전히 스택에서 제거할 수도 있습니다:

config.middleware.delete Rack::MethodOverride

i18n 구성

이러한 모든 구성 옵션은 I18n 라이브러리에 위임됩니다.

config.i18n.available_locales

애플리케이션에 허용된 사용 가능한 로케일을 정의합니다. 기본값은 일반적으로 새 애플리케이션에서 :en뿐인 로케일 키 전체입니다.

config.i18n.default_locale

i18n에 사용되는 애플리케이션의 기본 로케일을 설정합니다. 기본값은 :en입니다.

config.i18n.enforce_available_locales

i18n을 통해 전달된 모든 로케일이 available_locales 목록에 선언되어 있어야 하며, 사용할 수 없는 로케일을 설정하려고 하면 I18n::InvalidLocale 예외가 발생하도록 합니다. 기본값은 true입니다. 사용자 입력에서 잘못된 로케일이 설정되는 것을 방지하는 보안 조치이므로 이 옵션을 비활성화하는 것은 강력히 권장되지 않습니다.

config.i18n.load_path

Rails가 로케일 파일을 찾는 경로입니다. 기본값은 config/locales/**/*.{yml,rb}입니다.

config.i18n.raise_on_missing_translations

누락된 번역에 대해 오류를 발생시킬지 여부를 결정합니다. 기본값은 false입니다.

config.i18n.fallbacks

누락된 번역에 대한 폴백 동작을 설정합니다. 이 옵션에 대한 3가지 사용 예:

  • 기본 로케일을 폴백으로 사용하려면 true로 설정할 수 있습니다:

    config.i18n.fallbacks = true
    
  • 폴백 로케일 배열을 설정할 수 있습니다:

    config.i18n.fallbacks = [:tr, :en]
    
  • 로케일별로 다른 폴백을 설정할 수 있습니다. 예를 들어 :az에 대해 :tr을, :da에 대해 [:de, :en]을 폴백으로 사용하려면 다음과 같이 할 수 있습니다:

    config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
    #or
    config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
    

Active Model 구성

config.active_model.i18n_customize_full_message

Error#full_message 형식을 i18n 로케일 파일에서 재정의할 수 있는지 여부를 제어합니다. 기본값은 false입니다.

true로 설정하면 full_message가 속성 및 모델 수준의 로케일 파일에서 형식을 찾습니다. 기본 형식은 "%{attribute} %{message}"이며, attribute는 속성 이름, message는 유효성 검사별 메시지입니다. 다음 예제는 모든 Person 속성과 특정 Person 속성(age)에 대한 형식을 재정의합니다.

class Person
  include ActiveModel::Validations

  attr_accessor :name, :age

  validates :name, :age, presence: true
end
en:
  activemodel: # or activerecord:
    errors:
      models:
        person:
          # Person 속성의 형식 재정의:
          format: "Invalid %{attribute} (%{message})"
          attributes:
            age:
              # age 속성의 형식 재정의:
              format: "%{message}"
              blank: "Please fill in your %{attribute}"
irb> person = Person.new.tap(&:valid?)

irb> person.errors.full_messages
=> [
  "Invalid Name (can't be blank)",
  "Please fill in your Age"
]

irb> person.errors.messages
=> {
  :name => ["can't be blank"],
  :age  => ["Please fill in your Age"]
}

Active Record 구성

config.active_record에는 다양한 구성 옵션이 포함되어 있습니다:

config.active_record.logger

Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 허용하며, 이 로거는 새 데이터베이스 연결에 전달됩니다. Active Record 모델 클래스 또는 Active Record 모델 인스턴스에서 logger를 호출하여 이 로거를 검색할 수 있습니다. nil로 설정하면 로깅이 비활성화됩니다.

config.active_record.primary_key_prefix_type

기본 키 열의 명명을 조정할 수 있습니다. 기본적으로 Rails는 기본 키 열이 id라고 가정하며(이 구성 옵션을 설정할 필요가 없음), 다음과 같은 다른 옵션이 있습니다:

  • :table_name은 Customer 클래스의 기본 키를 customerid로 만듭니다.
  • :table_name_with_underscore은 Customer 클래스의 기본 키를 customer_id로 만듭니다.

config.active_record.table_name_prefix

테이블 이름에 전역 문자열을 접두사로 추가할 수 있습니다. northwest_로 설정하면 Customer 클래스가 northwest_customers 테이블을 찾습니다. 기본값은 빈 문자열입니다.

config.active_record.table_name_suffix

테이블 이름에 전역 문자열을 접미사로 추가할 수 있습니다. _northwest로 설정하면 Customer 클래스가 customers_northwest 테이블을 찾습니다. 기본값은 빈 문자열입니다.

config.active_record.schema_migrations_table_name

스키마 마이그레이션 테이블의 이름을 설정할 수 있습니다.

config.active_record.internal_metadata_table_name

내부 메타데이터 테이블의 이름을 설정할 수 있습니다.

config.active_record.protected_environments

데이터베이스에 대한 파괴적인 작업이 금지되어야 하는 환경 이름의 배열을 설정할 수 있습니다.

config.active_record.pluralize_table_names

Rails가 데이터베이스에서 단수 또는 복수 테이블 이름을 찾을지 지정합니다. true(기본값)로 설정하면 Customer 클래스가 customers 테이블을 사용합니다. false로 설정하면 Customer 클래스가 customer 테이블을 사용합니다.

config.active_record.default_timezone

데이터베이스에서 날짜와 시간을 가져올 때 Time.local(:local로 설정된 경우) 또는 Time.utc(:utc로 설정된 경우)를 사용할지 결정합니다. 기본값은 :utc입니다.

config.active_record.schema_format

데이터베이스 스키마를 파일에 덤프하는 형식을 제어합니다. 옵션은 마이그레이션에 의존하는 데이터베이스 독립적 버전인 :ruby(기본값) 또는 데이터베이스 종속적 SQL 문 집합인 :sql입니다.

config.active_record.error_on_ignored_order

배치 쿼리 중 쿼리 순서가 무시되는 경우 오류를 발생시킬지 여부를 지정합니다. 옵션은 오류 발생(true) 또는 경고(false)입니다. 기본값은 false입니다.

config.active_record.timestamped_migrations

마이그레이션에 시간 스탬프 또는 연속 정수를 사용할지 여부를 제어합니다. 기본값은 true이며, 여러 개발자가 동일한 애플리케이션에서 작업하는 경우 시간 스탬프가 선호됩니다.

config.active_record.automatically_invert_plural_associations

Active Record가 복수형 이름으로 역관계를 자동으로 찾을지 여부를 제어합니다.

예:

class Post < ApplicationRecord
  has_many :comments
end

class Comment < ApplicationRecord
  belongs_to :post
end

위의 경우 Active Record는 Post에서 :comment(단수) 관계만 찾았으며 네, 계속해서 번역하겠습니다.

config.active_record.automatically_invert_plural_associations

찾지 못했습니다.

이 옵션을 활성화하면 :comments 관계도 찾습니다. 대부분의 경우 역관계 검색이 도움이 되어 일부 불필요한 쿼리를 방지할 수 있지만, 기존 코드와 호환되지 않을 수 있습니다.

이 동작은 모델 단위로 비활성화할 수 있습니다:

class Comment < ApplicationRecord
  self.automatically_invert_plural_associations = false

  belongs_to :post
end

그리고 관계 단위로도 비활성화할 수 있습니다:

class Comment < ApplicationRecord
  self.automatically_invert_plural_associations = true

  belongs_to :post, inverse_of: nil
end

config.active_record.validate_migration_timestamps

마이그레이션 타임스탬프를 검증할지 여부를 제어합니다. 설정된 경우 마이그레이션 파일의 타임스탬프 접두사가 현재 시간과 1일 이상 차이나면 오류가 발생합니다. 이는 마이그레이션 파일의 미래 날짜 지정을 방지하여 마이그레이션 생성 및 기타 마이그레이션 명령에 영향을 미치는 것을 방지합니다. config.active_record.timestamped_migrationstrue로 설정되어야 합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.2 true

config.active_record.db_warnings_action

SQL 쿼리에서 경고가 발생할 때 취할 조치를 제어합니다. 다음 옵션을 사용할 수 있습니다:

  • :ignore - 데이터베이스 경고가 무시됩니다. 이것이 기본값입니다.

  • :log - 데이터베이스 경고가 ActiveRecord.logger:warn 수준으로 기록됩니다.

  • :raise - 데이터베이스 경고가 ActiveRecord::SQLWarning으로 발생됩니다.

  • :report - 데이터베이스 경고가 Rails 오류 리포터의 구독자에게 보고됩니다.

  • 사용자 정의 프로시저 - 사용자 정의 프로시저를 제공할 수 있습니다. SQLWarning 오류 객체를 받아야 합니다.

    예:

    config.active_record.db_warnings_action = ->(warning) do
      # 사용자 정의 예외 보고 서비스에 보고
      Bugsnag.notify(warning.message) do |notification|
        notification.add_metadata(:warning_code, warning.code)
        notification.add_metadata(:warning_level, warning.level)
      end
    end
    

config.active_record.db_warnings_ignore

무시할 경고 코드와 메시지를 지정합니다. 기본적으로 모든 경고가 보고됩니다. 무시할 경고는 문자열 또는 정규식으로 지정할 수 있습니다. 예:

  config.active_record.db_warnings_action = :raise
  # 다음 경고는 발생되지 않습니다
  config.active_record.db_warnings_ignore = [
    /Invalid utf8mb4 character string/,
    "An exact warning message",
    "1062", # MySQL Error 1062: Duplicate entry
  ]

config.active_record.migration_strategy

마이그레이션에서 스키마 문 메서드를 수행하는 데 사용되는 전략 클래스를 제어합니다. 기본 클래스는 연결 어댑터에 위임합니다. 사용자 정의 전략은 ActiveRecord::Migration::ExecutionStrategy에서 상속해야 하며, 구현되지 않은 메서드에 대해 기본 동작을 유지하는 DefaultStrategy에서 상속할 수 있습니다:

class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
  def drop_table(*)
    raise "Dropping tables is not supported!"
  end
end

config.active_record.migration_strategy = CustomMigrationStrategy

config.active_record.lock_optimistically

Active Record가 낙관적 잠금을 사용할지 여부를 제어하며, 기본값은 true입니다.

config.active_record.cache_timestamp_format

캐시 키의 타임스탬프 값 형식을 제어합니다. 기본값은 :usec입니다.

config.active_record.record_timestamps

모델에서 createupdate 작업에 대한 타임스탬핑 여부를 제어하는 부울 값입니다. 기본값은 true입니다.

config.active_record.partial_inserts

새 레코드를 생성할 때 기본값과 다른 속성만 설정하는 부분 쓰기를 사용할지 여부를 제어하는 부울 값입니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) true
7.0 false

config.active_record.partial_updates

기존 레코드를 업데이트할 때 변경된 속성만 설정하는 부분 쓰기를 사용할지 여부를 제어하는 부울 값입니다. 동시 업데이트가 있을 수 있으므로 부분 업데이트를 사용할 때는 config.active_record.lock_optimistically도 사용해야 합니다. 기본값은 true입니다.

config.active_record.maintain_test_schema

Active Record가 테스트 데이터베이스 스키마를 db/schema.rb(또는 db/structure.sql) 파일과 동기화하려고 할지 여부를 제어하는 부울 값입니다. 기본값은 true입니다.

config.active_record.dump_schema_after_migration

마이그레이션을 실행할 때 스키마 덤프(db/schema.rb 또는 db/structure.sql)가 발생할지 여부를 제어하는 플래그입니다. 이 설정은 Rails에서 생성된 config/environments/production.rb에서 false로 설정됩니다. 이 구성이 설정되지 않은 경우 기본값은 true입니다.

config.active_record.dump_schemas

db:schema:dump를 호출할 때 어떤 데이터베이스 스키마를 덤프할지 제어합니다. 옵션은 :schema_search_path(기본값)는 schema_search_path에 나열된 스키마를 덤프하고, :all은 항상 schema_search_path와 관계없이 모든 스키마를 덤프하며, 쉼표로 구분된 스키마 문자열도 허용됩니다.

config.active_record.before_committed_on_all_records

트랜잭션의 모든 등록된 레코드에 대해 before_committed! 콜백을 활성화합니다. 이전 동작은 트랜잭션에 동일한 레코드의 여러 복사본이 있는 경우 첫 번째 복사본에만 콜백을 실행했습니다.

버전 시작 기본값
(원본) false
7.1 true

config.active_record.belongs_to_required_by_default

belongs_to 관계가 없으면 레코드 유효성 검사에 실패하도록 하는 부울 값입니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) nil
5.0 true

config.active_record.belongs_to_required_validates_foreign_key

부모가 필수인 경우 부모 관련 열의 존재만 유효성을 검사하도록 합니다. 이전 동작은 부모 레코드의 존재를 유효성 검사했는데, 이로 인해 부모가 변경되지 않은 경우에도 자식 레코드를 업데이트할 때마다 부모를 가져오는 추가 쿼리가 발생했습니다.

버전 시작 기본값
(원본) true
7.1 false

config.active_record.marshalling_format_version

7.1로 설정하면 Marshal.dump를 사용하여 Active Record 인스턴스를 더 효율적으로 직렬화할 수 있습니다.

이렇게 하면 직렬화 형식이 변경되므로 이 방식으로 직렬화된 모델은 이전 버전(< 7.1)의 Rails에서 읽을 수 없습니다. 그러나 이전 형식의 메시지는 이 최적화가 활성화되어 있는지 여부에 관계없이 계속 읽을 수 있습니다.

버전 시작 기본값
(원본) 6.1
7.1 7.1

config.active_record.action_on_strict_loading_violation

strict_loading이 관계에 설정된 경우 예외를 발생시키거나 로그에 기록할지 여부를 활성화합니다. 기본값은 모든 환경에서 :raise입니다. :log로 변경하면 예외 대신 로거에 위반 사항을 보냅니다.

config.active_record.strict_loading_by_default

strict_loading 모드를 기본적으로 활성화할지 여부를 제어하는 부울 값입니다. 기본값은 false입니다.

config.active_record.warn_on_records_fetched_greater_than

쿼리 결과 크기에 대한 경고 임계값을 설정할 수 있습니다. 쿼리에서 반환된 레코드 수가 임계값을 초과하면 경고가 기록됩니다. 이를 통해 메모리 누수를 일으킬 수 있는 쿼리를 식별할 수 있습니다.

config.active_record.index_nested_attribute_errors

has_many 관계의 중첩된 오류를 인덱스와 함께 표시할 수 있습니다. 기본값은 false입니다.

config.active_record.use_schema_cache_dump

bin/rails db:schema:cache:dump로 생성된 db/schema_cache.yml에서 스키마 캐시 정보를 가져올 수 있도록 합니다. 데이터베이스에 쿼리를 보내지 않고도 이 정보를 얻을 수 있습니다. 기본값은 true입니다.

config.active_record.cache_versioning

안정적인 #cache_key 메서드와 변경되는 #cache_version 메서드를 사용할지 여부를 나타냅니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
5.2 true

config.active_record.collection_cache_versioning

ActiveRecord::Relation 유형의 캐시된 객체가 변경될 때 동일한 캐시 키를 재사용할 수 있도록 관계의 휘발성 정보(최대 업데이트 시간 및 개수)를 캐시 버전으로 이동합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
6.0 true

config.active_record.has_many_inversing

belongs_to에서 has_many 관계를 탐색할 때 역 레코드를 설정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
6.1 true

`config.active네, 계속해서 번역하겠습니다.

config.active_record.automatic_scope_inversing

스코프가 있는 관계에 대해 inverse_of를 자동으로 유추하도록 합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.0 true

config.active_record.destroy_association_async_job

관련 레코드를 백그라운드에서 삭제하는 데 사용할 작업을 지정할 수 있습니다. 기본값은 ActiveRecord::DestroyAssociationAsyncJob입니다.

config.active_record.destroy_association_async_batch_size

dependent: :destroy_async 관계 옵션에 의해 백그라운드 작업에서 삭제되는 최대 레코드 수를 지정할 수 있습니다. 배치 크기가 낮을수록 더 많은 짧은 실행 백그라운드 작업이 예약되고, 배치 크기가 높을수록 더 적은 긴 실행 백그라운드 작업이 예약됩니다. 이 옵션의 기본값은 nil이며, 이 경우 관련 레코드 전체가 동일한 백그라운드 작업에서 삭제됩니다.

config.active_record.queues.destroy

삭제 작업에 사용할 Active Job 큐를 지정할 수 있습니다. 이 옵션이 nil이면 삭제 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다. 기본값은 nil입니다.

config.active_record.enumerate_columns_in_select_statements

true이면 SELECT 문에 항상 열 이름을 포함하고 SELECT * 쿼리를 피합니다. 이를 통해 PostgreSQL 데이터베이스에 열을 추가할 때 준비된 문 캐시 오류를 방지할 수 있습니다. 기본값은 false입니다.

config.active_record.verify_foreign_keys_for_fixtures

테스트에서 고정 데이터를 로드한 후 모든 외래 키 제약 조건이 유효한지 확인합니다. PostgreSQL과 SQLite에서만 지원됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.0 true

config.active_record.raise_on_assign_to_attr_readonly

attr_readonly 속성에 할당할 때 예외를 발생시킵니다. 이전 동작은 할당을 허용했지만 데이터베이스에 변경 사항을 저장하지 않았습니다.

버전 시작 기본값
(원본) false
7.1 true

config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction

동일한 레코드를 변경하는 여러 Active Record 인스턴스가 트랜잭션 내에 있는 경우 Rails는 after_commit 또는 after_rollback 콜백을 하나의 인스턴스에만 실행합니다. 이 옵션은 Rails가 어떤 인스턴스에 콜백을 실행할지 결정하는 방식을 지정합니다.

true이면 인스턴스 상태가 오래될 수 있지만 첫 번째로 저장된 인스턴스에서 트랜잭션 콜백이 실행됩니다.

false이면 최신 인스턴스 상태를 가진 인스턴스에서 트랜잭션 콜백이 실행됩니다. 이 경우 다음과 같이 선택됩니다:

  • 일반적으로 트랜잭션 내에서 동일한 레코드를 마지막으로 저장한 인스턴스에서 트랜잭션 콜백을 실행합니다.
  • 두 가지 예외가 있습니다:
    • 레코드가 트랜잭션 내에서 생성되고 다른 인스턴스에 의해 업데이트된 경우 after_create_commit 콜백은 두 번째 인스턴스에서 실행됩니다. 이는 해당 인스턴스의 상태를 기반으로 실행되어야 할 after_update_commit 콜백 대신입니다.
    • 레코드가 트랜잭션 내에서 삭제된 경우 after_destroy_commit 콜백은 마지막으로 삭제된 인스턴스에서 실행되며, 이후 오래된 인스턴스가 업데이트를 수행하더라도(영향을 미치지 않음) 무시됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) true
7.1 false

config.active_record.default_column_serializer

지정되지 않은 경우 사용할 기본 직렬화기 구현입니다.

역사적으로 serializestore는 대체 직렬화기 구현을 허용했지만 기본적으로 YAML을 사용했습니다. 그러나 YAML은 효율적이지 않고 주의 깊게 사용하지 않으면 보안 취약점의 원인이 될 수 있습니다.

따라서 데이터베이스 직렬화에는 더 엄격하고 제한적인 형식을 선호하는 것이 좋습니다.

불행히도 Ruby 표준 라이브러리에는 적절한 기본값이 없습니다. JSON이 형식으로 사용될 수 있지만 json gem은 지원되지 않는 유형을 문자열로 캐스팅하여 버그가 발생할 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) YAML
7.1 nil

config.active_record.run_after_transaction_callbacks_in_order_defined

true이면 after_commit 콜백이 정의된 순서대로 실행됩니다. false이면 역순으로 실행됩니다.

다른 모든 콜백은 항상 정의된 순서대로 실행됩니다(단, prepend: true를 사용하는 경우는 제외).

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.1 true

config.active_record.query_log_tags_enabled

어댑터 수준 쿼리 주석을 활성화할지 여부를 지정합니다. 기본값은 false입니다.

참고: 이 값이 true로 설정되면 데이터베이스 준비 문이 자동으로 비활성화됩니다.

config.active_record.query_log_tags

SQL 주석에 삽입할 키/값 태그 배열을 정의합니다. 기본값은 [ :application, :controller, :action, :job ]입니다. 사용 가능한 태그는 :application, :controller, :namespaced_controller, :action, :job, :source_location입니다.

config.active_record.query_log_tags_format

태그에 사용할 형식기를 지정하는 기호입니다. 유효한 값은 :sqlcommenter:legacy입니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :legacy
7.1 :sqlcommenter

config.active_record.cache_query_log_tags

쿼리 로그 태그 캐싱을 활성화할지 여부를 지정합니다. 요청 또는 작업 실행 중 컨텍스트가 변경되지 않는 애플리케이션의 경우 쿼리 로그 태그 캐싱을 통해 성능 향상을 얻을 수 있습니다. 기본값은 false입니다.

config.active_record.schema_cache_ignored_tables

스키마 캐시를 생성할 때 무시할 테이블 목록을 정의합니다. 문자열 배열 또는 정규식으로 테이블 이름을 지정할 수 있습니다.

config.active_record.verbose_query_logs

데이터베이스 쿼리를 호출하는 메서드의 소스 위치가 관련 쿼리 아래에 기록되어야 하는지 여부를 지정합니다. 기본적으로 이 플래그는 개발 환경에서 true, 다른 모든 환경에서 false입니다.

config.active_record.sqlite3_adapter_strict_strings_by_default

SQLite3Adapter가 엄격한 문자열 모드로 사용되어야 하는지 여부를 지정합니다. 엄격한 문자열 모드를 사용하면 이중 인용 문자열 리터럴이 비활성화됩니다.

SQLite에는 이중 인용 문자열 리터럴에 대한 일부 특이점이 있습니다. 먼저 이중 인용 문자열을 식별자 이름으로 간주하지만 존재하지 않는 경우 문자열 리터럴로 간주합니다. 따라서 오타로 인해 문제가 조용히 발생할 수 있습니다. 예를 들어 존재하지 않는 열에 대한 인덱스를 만들 수 있습니다. 자세한 내용은 SQLite 문서를 참조하세요.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.1 true

config.active_record.async_query_executor

비동기 쿼리 풀링 방식을 지정합니다.

기본값은 nil이며, 이는 load_async가 비활성화되고 대신 쿼리가 직접 실행됨을 의미합니다. 쿼리를 실제로 비동기적으로 수행하려면 :global_thread_pool 또는 :multi_thread_pool로 설정해야 합니다.

:global_thread_pool은 애플리케이션이 연결된 모든 데이터베이스에 대해 단일 풀을 사용합니다. 단일 데이터베이스 또는 한 번에 하나의 데이터베이스 샤드만 쿼리하는 애플리케이션에 선호되는 구성입니다.

:multi_thread_pool은 데이터베이스당 하나의 풀을 사용하며, 각 풀 크기는 database.yml에서 max_threadsmin_thread 속성을 통해 개별적으로 구성할 수 있습니다. 이는 여러 데이터베이스를 동시에 자주 쿼리하고 최대 동시성을 더 정확하게 정의해야 하는 애플리케이션에 유용할 수 있습니다.

config.active_record.global_executor_concurrency

config.active_record.async_query_executor = :global_thread_pool와 함께 사용되며, 비동기 쿼리를 동시에 실행할 수 있는 최대 수를 정의합니다.

기본값은 4입니다.

이 숫자는 database.yml에 구성된 데이터베이스 연결 풀 크기와 함께 고려해야 합니다. 연결 풀은 전경 스레드(예: 웹 서버 또는 작업자 스레드)와 백그라운드 스레드를 모두 수용할 수 있어야 합니다.

각 프로세스에 대해 Rails는 이 많은 네, 계속해서 번역하겠습니다.

config.active_record.global_executor_concurrency

스레드를 사용하여 비동기 쿼리를 처리하는 전역 쿼리 실행기를 생성합니다. 따라서 풀 크기는 최소 thread_count + global_executor_concurrency + 1이어야 합니다. 예를 들어 웹 서버의 최대 스레드 수가 3이고 global_executor_concurrency가 4로 설정된 경우 풀 크기는 최소 8이어야 합니다.

config.active_record.yaml_column_permitted_classes

기본값은 [Symbol]입니다. ActiveRecord::Coders::YAMLColumn에서 safe_load()에 허용되는 추가 클래스를 지정할 수 있습니다.

config.active_record.use_yaml_unsafe_load

기본값은 false입니다. ActiveRecord::Coders::YAMLColumn에서 unsafe_load를 사용하도록 허용합니다.

config.active_record.raise_int_wider_than_64bit

기본값은 true입니다. PostgreSQL 어댑터에 64비트 signed 표현보다 더 넓은 정수가 제공된 경우 예외를 발생시킬지 여부를 결정합니다.

config.active_record.generate_secure_token_on

has_secure_token 선언에 대한 값 생성 시기를 제어합니다. 기본적으로 모델 초기화 시 생성됩니다:

class User < ApplicationRecord
  has_secure_token
end

record = User.new
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"

config.active_record.generate_secure_token_on = :create로 설정하면 모델 생성 시 값이 생성됩니다:

# config/application.rb

config.active_record.generate_secure_token_on = :create

# app/models/user.rb
class User < ApplicationRecord
  has_secure_token on: :create
end

record = User.new
record.token # => nil
record.save!
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
버전 시작 기본값
(원본) :create
7.1 :initialize

config.active_record.permanent_connection_checkout

ActiveRecord::Base.connection이 오류를 발생시키거나 사용되지 않음 경고를 내보내거나 아무 작업도 하지 않도록 제어합니다.

ActiveRecord::Base.connection은 연결 풀에서 데이터베이스 연결을 체크아웃하고 요청 또는 작업 종료 시까지 해당 연결을 보유합니다. 이 동작은 스레드 또는 파이버가 사용 가능한 연결 수보다 많은 환경에서 바람직하지 않을 수 있습니다.

이 구성을 사용하면 ActiveRecord::Base.connection을 호출하는 코드를 찾아 ActiveRecord::Base.with_connection으로 마이그레이션할 수 있습니다.

값은 :disallowed, :deprecated 또는 true로 설정할 수 있으며, 각각 오류 발생, 사용되지 않음 경고 발행, 아무 작업도 하지 않음을 의미합니다.

버전 시작 기본값
(원본) true

ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleansActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleans

Active Record MySQL 어댑터가 모든 tinyint(1) 열을 부울로 간주할지 여부를 제어합니다. 기본값은 true입니다.

ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables

PostgreSQL에서 생성된 데이터베이스 테이블이 "unlogged"여야 하는지 여부를 제어합니다. 이렇게 하면 성능이 향상될 수 있지만 데이터베이스 충돌 시 데이터 손실 위험이 있습니다. 프로덕션 환경에서 사용하는 것은 매우 위험합니다. 기본값은 모든 환경에서 false입니다.

테스트에 활성화하려면:

# config/environments/test.rb

ActiveSupport.on_load(:active_record_postgresqladapter) do
  self.create_unlogged_tables = true
end

ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type

Active Record PostgreSQL 어댑터가 마이그레이션이나 스키마에서 datetime을 호출할 때 사용할 기본 유형을 제어합니다. 이는 NATIVE_DATABASE_TYPES에 구성된 기호 중 하나여야 합니다. 기본값은 :timestamp로, 마이그레이션의 t.datetime이 "timestamp without time zone” 열을 생성합니다.

“timestamp with time zone"을 사용하려면:

# config/application.rb

ActiveSupport.on_load(:active_record_postgresqladapter) do
  self.datetime_type = :timestamptz
end

bin/rails db:migrate를 실행하여 schema.rb를 다시 빌드해야 합니다.

ActiveRecord::SchemaDumper.ignore_tables

생성된 스키마 파일에 포함되지 않아야 하는 테이블 배열을 허용합니다.

ActiveRecord::SchemaDumper.fk_ignore_pattern

외래 키 이름이 db/schema.rb에 덤프되어야 할지 여부를 결정하는 데 사용되는 다른 정규식을 설정할 수 있습니다. 기본적으로 fk_rails_로 시작하는 외래 키 이름은 데이터베이스 스키마 덤프에 내보내지 않습니다. 기본값은 /^fk_rails_[0-9a-f]{10}$/입니다.

config.active_record.encryption.add_to_filter_parameters

암호화된 속성의 inspect에 대한 자동 필터링을 활성화합니다.

기본값은 true입니다.

config.active_record.encryption.hash_digest_class

Active Record 암호화에서 사용되는 다이제스트 알고리즘을 설정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) OpenSSL::Digest::SHA1
7.1 OpenSSL::Digest::SHA256

config.active_record.encryption.support_sha1_for_non_deterministic_encryption

SHA-1 다이제스트 클래스를 사용하여 기존 데이터를 암호화하는 것에 대한 지원을 활성화합니다. false이면 config.active_record.encryption.hash_digest_class에 구성된 다이제스트만 지원됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) true
7.1 false

config.active_record.protocol_adapters

데이터베이스 연결 URL을 구성할 때 사용하는 경우 이 옵션은 프로토콜과 기본 데이터베이스 어댑터 간의 매핑을 제공합니다. 예를 들어 환경에서 DATABASE_URL=mysql://localhost/database를 지정할 수 있으며 Rails는 mysqlmysql2 어댑터에 매핑하지만 애플리케이션은 이러한 매핑을 재정의할 수 있습니다:

config.active_record.protocol_adapters.mysql = "trilogy"

매핑을 찾을 수 없는 경우 프로토콜이 어댑터 이름으로 사용됩니다.

Action Controller 구성

config.action_controller에는 다음과 같은 구성 설정이 포함되어 있습니다:

config.action_controller.asset_host

자산의 호스트를 설정합니다. 애플리케이션 서버 자체가 아닌 CDN을 사용하여 자산을 호스팅하는 경우 유용합니다. Action Mailer에 다른 구성이 있는 경우에만 이 설정을 사용하고, 그렇지 않으면 config.asset_host를 사용하세요.

config.action_controller.perform_caching

애플리케이션이 Action Controller 구성 요소가 제공하는 캐싱 기능을 수행해야 하는지 여부를 구성합니다. 개발 환경에서는 false, 프로덕션에서는 true로 설정됩니다. 지정되지 않은 경우 기본값은 true입니다.

config.action_controller.default_static_extension

캐시된 페이지에 사용되는 확장자를 구성합니다. 기본값은 .html입니다.

config.action_controller.include_all_helpers

모든 뷰 헬퍼가 전역적으로 사용 가능한지 아니면 해당 컨트롤러에 범위가 지정되는지 구성합니다. false로 설정하면 UsersHelper 메서드는 UsersController의 일부로 렌더링된 뷰에서만 사용할 수 있습니다. true로 설정하면 UsersHelper 메서드가 모든 곳에서 사용 가능합니다. 기본 구성 동작(이 옵션이 명시적으로 true 또는 false로 설정되지 않은 경우)은 모든 뷰 헬퍼가 각 컨트롤러에 사용 가능하다는 것입니다.

config.action_controller.logger

Action Controller에서 사용할 로거를 허용합니다. Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 사용할 수 있습니다. nil로 설정하면 로깅이 비활성화됩니다.

config.action_controller.request_forgery_protection_token

RequestForgery에 대한 토큰 매개변수 이름을 설정합니다. protect_from_forgery를 호출하면 기본적으로 :authenticity_token으로 설정됩니다.

config.action_controller.allow_forgery_protection

CSRF 보호를 활성화하거나 비활성화합니다. 기본적으로 테스트 환경에서는 false, 다른 모든 환경에서는 true입니다.

config.action_controller.forgery_protection_origin_check

CSRF 방어의 추가 조치로 HTTP Origin 헤더가 사이트의 원본과 일치해야 하는지 여부를 구성합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
5.0 true

config.action_controller.per_form_csrf_tokens

CSRF 토큰이 생성된 메서드/작업에만 유효한지 구성합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
5.0 true

config.action_controller.default_protect_from_forgery

ActionController::Base에 forgery 보호를 추가할지 여부를 결정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
5.2 true

config.action_controller.relative_url_root

하위 디렉토리에 배포할 때 사용할 수 있습니다. 기본값은 config.relative_url_root입니다.

config.action_controller.permit_all_parameters

기본적으로 모든 매개변수에 대한 대량 할당을 허용합니다. 기본값은 false입니다.

config.action_controller.action_on_unpermitted_parameters

허용되지 않은 매개변수가 발견될 때의 동작을 제어합니다. 기본값은네, 계속해서 번역하겠습니다.

config.action_controller.action_on_unpermitted_parameters

테스트 및 개발 환경에서는 :log, 그 외에는 false입니다. 사용 가능한 값은 다음과 같습니다:

  • false는 아무 작업도 하지 않습니다.
  • :logunpermitted_parameters.action_controller 주제에서 ActiveSupport::Notifications.instrument 이벤트를 내보내고 DEBUG 수준에서 로그합니다.
  • :raiseActionController::UnpermittedParameters 예외를 발생시킵니다.

config.action_controller.always_permitted_parameters

기본적으로 허용되는 허용된 매개변수 목록을 설정합니다. 기본값은 ['controller', 'action']입니다.

config.action_controller.enable_fragment_cache_logging

다음과 같은 자세한 형식으로 프래그먼트 캐시 읽기 및 쓰기를 기록할지 여부를 결정합니다:

Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms)
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms)
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]

기본적으로 false로 설정되어 다음과 같은 출력이 생성됩니다:

Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]

config.action_controller.raise_on_missing_callback_actions

콜백의 :only 또는 :except 옵션에 지정된 작업이 컨트롤러에 없는 경우 AbstractController::ActionNotFound 예외를 발생시킵니다.

버전 시작 기본값
(원본) false
7.1 true (개발 및 테스트), false (기타 환경)

config.action_controller.raise_on_open_redirects

애플리케이션이 의도하지 않은 외부 호스트로 리디렉션되는 것(이른바 "오픈 리디렉션”)을 방지하기 위해 외부 리디렉션을 선택적으로 허용합니다.

이 구성이 true로 설정되면 외부 호스트가 포함된 URL이 redirect_to에 전달될 때 ActionController::Redirecting::UnsafeRedirectError가 발생합니다. 오픈 리디렉션이 허용되어야 하는 경우 allow_other_host: trueredirect_to 호출에 추가할 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.0 true

config.action_controller.log_query_tags_around_actions

컨트롤러 컨텍스트에 대한 쿼리 태그가 자동으로 around_filter를 통해 업데이트되어야 하는지 여부를 결정합니다. 기본값은 true입니다.

config.action_controller.wrap_parameters_by_default

Rails 7.0 이전에는 새 애플리케이션이 wrap_parameters.rb라는 초기화기로 생성되었으며, 이는 JSON 요청에 대해 ActionController::Base에서 매개변수 래핑을 활성화했습니다.

이 구성 값을 true로 설정하면 초기화기와 동일한 동작이 적용되므로 매개변수 래핑 동작을 사용자 정의하지 않으려는 애플리케이션에서 초기화기를 제거할 수 있습니다.

이 값과 관계없이 애플리케이션은 초기화기 또는 컨트롤러별로 매개변수 래핑 동작을 계속 사용자 정의할 수 있습니다.

ParamsWrapper에 대한 자세한 내용을 참조하세요.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.0 true

Action Dispatch 구성

config.action_dispatch.cookies_serializer

쿠키 직렬화기를 지정합니다. config.active_support.message_serializer와 동일한 값을 허용하며, :hybrid:json_allow_marshal의 별칭입니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :marshal
7.0 :json

config.action_dispatch.debug_exception_log_level

요청 중 발생한 예외를 기록할 때 ActionDispatch::DebugExceptions 미들웨어가 사용하는 로그 수준을 구성합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :fatal
7.1 :error

config.action_dispatch.default_headers

기본적으로 각 응답에 설정되는 HTTP 헤더 해시입니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본)
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "1; mode=block",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.0
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Download-Options" => "noopen",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}
7.1
{
"X-Frame-Options" => "SAMEORIGIN",
"X-XSS-Protection" => "0",
"X-Content-Type-Options" => "nosniff",
"X-Permitted-Cross-Domain-Policies" => "none",
"Referrer-Policy" => "strict-origin-when-cross-origin"
}

config.action_dispatch.default_charset

모든 렌더링에 대한 기본 문자 집합을 지정합니다. 기본값은 nil입니다.

config.action_dispatch.tld_length

애플리케이션의 TLD(최상위 도메인) 길이를 설정합니다. 기본값은 1입니다.

config.action_dispatch.ignore_accept_header

요청의 accept 헤더를 무시할지 여부를 결정합니다. 기본값은 false입니다.

config.action_dispatch.x_sendfile_header

서버별 X-Sendfile 헤더를 지정합니다. 이는 서버에서 가속화된 파일 전송에 유용합니다. 예를 들어 Apache의 경우 'X-Sendfile'로 설정할 수 있습니다.

config.action_dispatch.http_auth_salt

HTTP 인증 salt 값을 설정합니다. 기본값은 'http authentication'입니다.

서명된 쿠키 salt 값을 설정합니다. 기본값은 'signed cookie'입니다.

암호화된 쿠키 salt 값을 설정합니다. 기본값은 'encrypted cookie'입니다.

서명된 암호화된 쿠키 salt 값을 설정합니다. 기본값은 'signed encrypted cookie'입니다.

인증된 암호화된 쿠키 salt를 설정합니다. 기본값은 'authenticated encrypted cookie'입니다.

암호화된 쿠키에 사용할 암호화 알고리즘을 설정합니다. 기본값은 "aes-256-gcm"입니다.

서명된 쿠키에 사용할 다이제스트를 설정합니다. 기본값은 "SHA1"입니다.

config.action_dispatch.cookies_rotations

암호화된 및 서명된 쿠키에 대한 비밀, 암호화 알고리즘, 다이제스트를 교체할 수 있습니다.

서명된 및 암호화된 쿠키가 AES-256-CBC 암호화 대신 AES-256-GCM 인증 암호화를 사용하도록 제어합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
5.2 true

config.action_dispatch.use_cookies_with_metadata

쿠키에 목적 메타데이터를 포함하도록 합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
6.0 true

config.action_dispatch.perform_deep_munge

deep_munge 메서드가 매개변수에 수행되어야 하는지 여부를 구성합니다. 보안 가이드에서 자세한 내용을 확인하세요. 기본값은 true입니다.

config.action_dispatch.rescue_responses

예외를 HTTP 상태에 할당합니다. 해시를 허용하며 예외/상태 쌍을 지정할 수 있습니다.

# #[]= 또는 #merge!를 사용하여 기본값을 존중하는 것이 좋습니다
config.action_dispatch.rescue_responses['MyAuthenticationError'] = :unauthorized

ActionDispatch::ExceptionWrapper.rescue_responses를 관찰하여 구성을 확인할 수 있습니다. 기본적으로 다음과 같이 정의됩니다:

{
  'ActionController::RoutingError' => :not_found,
  'AbstractController::ActionNotFound' => :not_found,
  'ActionController::MethodNotAllowed' => :method_not_allowed,
  'ActionController::UnknownHttpMethod' => :method_not_allowed,
  'ActionController::NotImplemented' => :not_implemented,
  'ActionController::UnknownFormat' => :not_acceptable,
  'ActionDispatch::Http::MimeNegotiation::InvalidType' => :not_acceptable,
  'ActionController::MissingExactTemplate' => :not_acceptable,
  'ActionController::InvalidAuthenticityToken' => :unprocessable_entity,
  'ActionController::InvalidCrossOriginRequest' => :unprocessable_entity,
  'ActionDispatch::Http::Parameters::ParseError' => :bad_request,
  'ActionController::BadRequest' => :bad_request,
  'ActionController::ParameterMissing' => :bad_request,
  'Rack::QueryParser::ParameterTypeError' => :bad_request,
  'Rack::QueryParser::InvalidParameterError' => :bad_request,
  'ActiveRecord::RecordNotFound' => :not_, 계속해서 번역하겠습니다.

#### `config.action_dispatch.rescue_responses`

found,
  'ActiveRecord::StaleObjectError' => :conflict,
  'ActiveRecord::RecordInvalid' => :unprocessable_entity,
  'ActiveRecord::RecordNotSaved' => :unprocessable_entity
}

구성되지 않은 예외는 모두 500 Internal Server Error로 매핑됩니다.

config.action_dispatch.cookies_same_site_protection

쿠키를 설정할 때 SameSite 속성의 기본값을 구성합니다. nil로 설정하면 SameSite 속성이 추가되지 않습니다. SameSite 속성 값을 요청에 따라 동적으로 구성하려면 프로시저를 지정할 수 있습니다. 예:

config.action_dispatch.cookies_same_site_protection = ->(request) do
  :strict unless request.user_agent == "TestAgent"
end

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) nil
6.1 :lax

config.action_dispatch.ssl_default_redirect_status

ActionDispatch::SSL 미들웨어에서 HTTP에서 HTTPS로 리디렉션할 때 사용되는 기본 HTTP 상태 코드를 구성합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) 307
6.1 308

config.action_dispatch.log_rescued_responses

rescue_responses에 구성된 처리되지 않은 예외를 기록합니다. 기본값은 true입니다.

config.action_dispatch.show_exceptions

config.action_dispatch.show_exceptions 구성은 요청 중 발생한 예외를 처리하는 방식을 제어합니다(구체적으로는 ActionDispatch::ShowExceptions 미들웨어).

값을 :all로 설정하면 Action Pack이 예외를 처리하고 해당 오류 페이지를 렌더링합니다. 예를 들어 Action Pack은 ActiveRecord::RecordNotFound 예외를 처리하고 404 Not found 상태 코드로 public/404.html의 내용을 렌더링합니다.

값을 :rescuable로 설정하면 Action Pack은 config.action_dispatch.rescue_responses에 정의된 예외만 처리하고 나머지는 발생시킵니다. 예를 들어 Action Pack은 ActiveRecord::RecordNotFound를 처리하지만 NoMethodError는 발생시킵니다.

값을 :none으로 설정하면 Action Pack은 모든 예외를 발생시킵니다.

  • :all - 모든 예외에 대해 오류 페이지 렌더링
  • :rescuable - config.action_dispatch.rescue_responses에 선언된 예외에 대해 오류 페이지 렌더링
  • :none - 모든 예외 발생
버전 시작 기본값
(원본) true
7.1 :all

ActionDispatch::Callbacks.before

요청 전에 실행할 코드 블록을 지정합니다.

ActionDispatch::Callbacks.after

요청 후에 실행할 코드 블록을 지정합니다.

Action View 구성

config.action_view에는 소수의 구성 설정이 포함되어 있습니다:

config.action_view.cache_template_loading

템플릿이 각 요청에서 다시 로드되어야 하는지 여부를 제어합니다. 기본값은 !config.enable_reloading입니다.

config.action_view.field_error_proc

Active Model에서 오는 오류를 표시하는 HTML 생성기를 제공합니다. 블록은 Action View 템플릿 내에서 평가됩니다. 기본값은

Proc.new { |html_tag, instance| content_tag :div, html_tag, class: "field_with_errors" }

입니다.

config.action_view.default_form_builder

기본적으로 사용할 폼 빌더 클래스를 알려줍니다. 기본값은 ActionView::Helpers::FormBuilder입니다. 폼 빌더 클래스를 초기화 후(따라서 개발 환경에서 요청 간에 다시 로드됨) 로드하려면 문자열로 전달할 수 있습니다.

config.action_view.logger

Action View에서 사용할 로거를 허용합니다. Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 사용할 수 있습니다. nil로 설정하면 로깅이 비활성화됩니다.

config.action_view.erb_trim_mode

특정 ERB 구문의 트리밍을 제어합니다. 기본값은 '-'이며, <%= -%> 또는 <%= =%>를 사용할 때 꼬리 공백과 줄바꿈을 제거합니다. 다른 값으로 설정하면 트리밍 지원이 비활성화됩니다.

config.action_view.frozen_string_literal

ERB 템플릿을 # frozen_string_literal: true 매직 주석으로 컴파일하여 모든 문자열 리터럴을 동결하고 할당을 절약합니다. 모든 뷰에 대해 이 기능을 활성화하려면 true로 설정하세요.

config.action_view.embed_authenticity_token_in_remote_forms

remote: true가 있는 폼에 대한 authenticity_token의 기본 동작을 설정합니다. 기본적으로 false로 설정되어 있어 원격 폼에 authenticity_token이 포함되지 않습니다. 이는 폼을 조각 캐싱할 때 도움이 됩니다. 원격 폼은 meta 태그에서 인증 토큰을 가져오므로 포함할 필요가 없습니다. 그러나 JavaScript 없는 브라우저를 지원해야 하는 경우 authenticity_token: true를 폼 옵션으로 전달하거나 이 구성 설정을 true로 설정할 수 있습니다.

config.action_view.prefix_partial_path_with_controller_namespace

네임스페이스가 지정된 컨트롤러에서 렌더링된 템플릿에서 부분 템플릿이 하위 디렉토리에서 조회되어야 하는지 여부를 결정합니다. 예를 들어 Admin::ArticlesController라는 컨트롤러가 다음 템플릿을 렌더링한다고 가정합니다:

<%= render @article %>

기본 설정은 true이며, 이 경우 /admin/articles/_article.erb 부분 템플릿이 사용됩니다. 값을 false로 설정하면 /articles/_article.erb 부분 템플릿이 사용되며, 이는 네임스페이스가 지정되지 않은 ArticlesController에서 렌더링할 때와 동일한 동작입니다.

config.action_view.automatically_disable_submit_tag

submit_tag가 클릭 시 자동으로 비활성화되어야 하는지 여부를 결정합니다. 기본값은 true입니다.

config.action_view.debug_missing_translation

누락된 번역 키를 <span> 태그로 래핑할지 여부를 결정합니다. 기본값은 true입니다.

config.action_view.form_with_generates_remote_forms

form_with가 원격 폼을 생성할지 여부를 결정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
5.1 true
6.1 false

config.action_view.form_with_generates_ids

form_with가 입력에 ID를 생성할지 여부를 결정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
5.2 true

config.action_view.default_enforce_utf8

이전 버전의 Internet Explorer가 UTF-8로 인코딩된 폼을 제출하도록 하는 숨겨진 태그를 폼에 생성할지 여부를 결정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) true
6.0 false

config.action_view.image_loading

image_tag 헬퍼가 렌더링하는 <img> 태그의 loading 속성에 대한 기본값을 지정합니다. 예를 들어 "lazy"로 설정하면 image_tag에 의해 렌더링된 <img> 태그에 loading="lazy"가 포함됩니다. (이 값은 image_tagloading: "eager"와 같이 이미지별로 재정의할 수 있습니다.) 기본값은 nil입니다.

config.action_view.image_decoding

image_tag 헬퍼가 렌더링하는 <img> 태그의 decoding 속성에 대한 기본값을 지정합니다. 기본값은 nil입니다.

config.action_view.annotate_rendered_view_with_filenames

렌더링된 뷰에 템플릿 파일 이름을 주석으로 추가할지 여부를 결정합니다. 기본값은 false입니다.

javascript_include_tagstylesheet_link_tag가 자산을 미리 로드하는 Link 헤더를 생성할지 여부를 결정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) nil
6.1 true

config.action_view.button_to_generates_button_tag

false이면 button_to<form> 내부에 <button> 또는 <input>을 렌더링합니다(<form> 생략):

<%= button_to "Content", "/" %>
# => <input type="submit" value="Content">

<%= button_to "/" do %>
  Content
<% end %>
# => <button type="submit">Content</button>

이 값을 true로 설정하면 button_to가 항상 <form> 내부에 <button> 태그를 생성합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.0 true

config.action_view.apply_stylesheet_media_default

stylesheet_link_tagmedia 속성을 제공하지 않는 경우 기본값으로 screen을 렌더링할지 여부를 결정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) true
7.0 false

config.action_view.prepend_content_exfiltration_prevention

form_tagbutton_to 헬퍼가 내용을 캡처할 수 없도록 하는 브라우저에 안전한(기술적으로는 잘못된) HTML 태그를 생성할지 여부를 결정합니다. 기본값은 false입니다.

config.action_view.sanitizer_vendor

Action View에서 사용되는 HTML sanitizer 집합을 ActionView::Helpers::SanitizeHelper.sanitizer_vendor를 설정하여 네, 계속해서 번역하겠습니다.

config.action_view.sanitizer_vendor

구성합니다. 기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값 마크업을 어떻게 구문 분석하는지
(원본) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (참고 참조) HTML5

참고: Rails::HTML5::Sanitizer는 JRuby에서 지원되지 않으므로 JRuby 플랫폼에서는 Rails::HTML4::Sanitizer로 대체됩니다.

Action Mailbox 구성

config.action_mailbox에는 다음과 같은 구성 옵션이 제공됩니다:

config.action_mailbox.logger

Action Mailbox에서 사용할 로거를 포함합니다. Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 허용합니다. 기본값은 Rails.logger입니다.

config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)

config.action_mailbox.incinerate_after

ActionMailbox::InboundEmail 레코드를 처리한 후 삭제할 시간을 ActiveSupport::Duration으로 지정합니다. 기본값은 30.days입니다.

# 처리 후 14일 후에 인바운드 이메일 소각
config.action_mailbox.incinerate_after = 14.days

config.action_mailbox.queues.incineration

소각 작업에 사용할 Active Job 큐를 지정하는 기호입니다. 이 옵션이 nil이면 소각 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :action_mailbox_incineration
6.1 nil

config.action_mailbox.queues.routing

라우팅 작업에 사용할 Active Job 큐를 지정하는 기호입니다. 이 옵션이 nil이면 라우팅 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :action_mailbox_routing
6.1 nil

config.action_mailbox.storage_service

이메일을 업로드하는 데 사용할 Active Storage 서비스를 지정하는 기호입니다. 이 옵션이 nil이면 이메일이 기본 Active Storage 서비스(참조: config.active_storage.service)에 업로드됩니다.

Action Mailer 구성

config.action_mailer에는 다음과 같은 구성 설정이 있습니다:

config.action_mailer.asset_host

자산의 호스트를 설정합니다. 애플리케이션 서버 자체가 아닌 CDN을 사용하여 자산을 호스팅하는 경우 유용합니다. Action Controller에 다른 구성이 있는 경우에만 이 설정을 사용하고, 그렇지 않으면 config.asset_host를 사용하세요.

config.action_mailer.logger

Action Mailer에서 사용할 로거를 허용합니다. Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 사용할 수 있습니다. nil로 설정하면 로깅이 비활성화됩니다.

config.action_mailer.smtp_settings

:smtp 전달 방법에 대한 자세한 구성을 허용합니다. 다음과 같은 옵션을 포함하는 해시를 허용합니다:

  • :address - 원격 메일 서버를 사용할 수 있습니다. 기본값인 “localhost"를 변경할 수 있습니다.
  • :port - 메일 서버가 포트 25 이외의 포트에서 실행되는 경우 변경할 수 있습니다.
  • :domain - HELO 도메인을 지정해야 하는 경우 여기에 설정할 수 있습니다.
  • :user_name - 메일 서버에 인증이 필요한 경우 사용자 이름을 설정할 수 있습니다.
  • :password - 메일 서버에 인증이 필요한 경우 비밀번호를 설정할 수 있습니다.
  • :authentication - 메일 서버에 인증이 필요한 경우 인증 유형(:plain, :login, :cram_md5)을 지정해야 합니다.
  • :enable_starttls - STARTTLS를 사용하여 SMTP 서버에 연결하고 지원되지 않는 경우 실패합니다. 기본값은 false입니다.
  • :enable_starttls_auto - SMTP 서버에서 STARTTLS를 사용할 수 있는지 감지하고 사용을 시작합니다. 기본값은 true입니다.
  • :openssl_verify_mode - TLS를 사용할 때 OpenSSL이 인증서를 확인하는 방식을 설정할 수 있습니다. 자체 서명 및/또는 와일드카드 인증서를 확인해야 하는 경우 유용합니다. OpenSSL 확인 상수 중 하나(OpenSSL::SSL::VERIFY_NONE 또는 OpenSSL::SSL::VERIFY_PEER)나 :none 또는 :peer를 사용할 수 있습니다.
  • :ssl/:tls - SMTP 연결에서 SMTP/TLS(SMTPS: SSL 연결을 통한 SMTP)를 활성화합니다.
  • :open_timeout - 연결을 시도하는 동안 대기할 시간(초)입니다.
  • :read_timeout - 읽기(2) 호출이 시간 초과될 때까지 대기할 시간(초)입니다.

또한 Mail::SMTP가 존중하는 모든 구성 옵션을 전달할 수 있습니다.

config.action_mailer.smtp_timeout

2.8.0 버전 이전에는 mail gem이 SMTP 요청에 대한 기본 시간 초과를 구성하지 않았습니다. 이 구성을 통해 애플리케이션에서 :open_timeout:read_timeout에 대한 기본값을 mail gem에 설정할 수 있으므로 요청이 무기한 걸리지 않습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) nil
7.0 5

config.action_mailer.sendmail_settings

:sendmail 전달 방법에 대한 자세한 구성을 허용합니다. 다음과 같은 옵션을 포함하는 해시를 허용합니다:

  • :location - sendmail 실행 파일의 위치입니다. 기본값은 /usr/sbin/sendmail입니다.
  • :arguments - 명령줄 인수입니다. 기본값은 %w[ -i ]입니다.

config.action_mailer.file_settings

:file 전달 방법을 구성합니다. 다음과 같은 옵션을 포함하는 해시를 허용합니다:

  • :location - 파일이 저장되는 위치입니다. 기본값은 "#{Rails.root}/tmp/mails"입니다.
  • :extension - 파일 확장자입니다. 기본값은 빈 문자열입니다.

config.action_mailer.raise_delivery_errors

이메일 전달에 실패할 경우 오류를 발생시킬지 여부를 지정합니다. 기본값은 true입니다.

config.action_mailer.delivery_method

전달 방법을 정의하며 기본값은 :smtp입니다. 자세한 내용은 Action Mailer 가이드의 구성 섹션을 참조하세요.

config.action_mailer.perform_deliveries

실제로 메일을 전달할지 여부를 지정하며 기본값은 true입니다. 테스트 용도로 false로 설정할 수 있습니다.

config.action_mailer.default_options

Action Mailer 기본값을 구성합니다. 모든 메일러에 대해 from 또는 reply_to와 같은 옵션을 설정하는 데 사용할 수 있습니다. 기본값은 다음과 같습니다:

{
  mime_version:  "1.0",
  charset:       "UTF-8",
  content_type: "text/plain",
  parts_order:  ["text/plain", "text/enriched", "text/html"]
}

해시를 할당하여 추가 옵션을 설정할 수 있습니다:

config.action_mailer.default_options = {
  from: "noreply@example.com"
}

config.action_mailer.observers

메일이 전송될 때 알림을 받을 옵저버를 등록합니다.

config.action_mailer.observers = ["MailObserver"]

config.action_mailer.interceptors

메일을 보내기 전에 호출될 인터셉터를 등록합니다.

config.action_mailer.interceptors = ["MailInterceptor"]

config.action_mailer.preview_interceptors

메일 미리보기 전에 호출될 인터셉터를 등록합니다.

config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]

config.action_mailer.preview_paths

메일러 미리보기의 위치를 지정합니다. 이 구성 옵션에 경로를 추가하면 해당 경로에서 메일러 미리보기를 찾습니다.

config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"

config.action_mailer.show_previews

메일러 미리보기를 활성화하거나 비활성화합니다. 기본적으로 개발 환경에서는 true입니다.

config.action_mailer.show_previews = false

config.action_mailer.perform_caching

메일러 템플릿이 프래그먼트 캐싱을 수행해야 하는지 여부를 지정합니다. 지정되지 않은 경우 기본값은 true입니다.

config.action_mailer.deliver_later_queue_name

기본 전달 작업(참조: config.action_mailer.delivery_job)에 사용할 Active Job 큐를 지정합니다. 이 옵션이 nil로 설정되면 전달 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다.

메일러 클래스는 다른 큐를 사용하도록 재정의할 수 있습니다. 이는 기본 전달 작업을 사용하는 경우에만 적용됩니다. 사용자 정의 작업을 사용하는 경우 해당 작업의 큐가 사용됩니다.

지정된 큐에서 Active Job 어댑터가 처리되도록 구성되어 있는지 확인하세요. 그렇지 않으면 전달 작업이 자동으로 무시될 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :mailers
6.1 nil

config.action_mailer.delivery_job

메일 전달 작업을 지정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) ActionMailer::MailDeliveryJob
6.0 `"ActionMail네, 계속해서 번역하겠습니다.

config.action_mailer.delivery_job

er::MailDeliveryJob”` |

Active Support 구성

Active Support에는 다음과 같은 구성 옵션이 있습니다:

config.active_support.bare

active_support/all의 로드를 활성화하거나 비활성화합니다. 기본값은 nil이며, 이는 active_support/all이 로드됨을 의미합니다.

config.active_support.test_order

테스트 케이스 실행 순서를 설정합니다. 가능한 값은 :random:sorted입니다. 기본값은 :random입니다.

config.active_support.escape_html_entities_in_json

JSON 직렬화에서 HTML 엔터티 이스케이프를 활성화하거나 비활성화합니다. 기본값은 true입니다.

config.active_support.use_standard_json_time_format

날짜를 ISO 8601 형식으로 직렬화할지 여부를 활성화합니다. 기본값은 true입니다.

config.active_support.time_precision

JSON으로 인코딩된 시간 값의 정밀도를 설정합니다. 기본값은 3입니다.

config.active_support.hash_digest_class

ETag 헤더와 같은 비민감 다이제스트를 생성하는 데 사용할 다이제스트 클래스를 구성할 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) OpenSSL::Digest::MD5
5.2 OpenSSL::Digest::SHA1
7.0 OpenSSL::Digest::SHA256

config.active_support.key_generator_hash_digest_class

구성된 비밀 기반 암호화 키를 파생시키는 데 사용할 다이제스트 클래스를 구성할 수 있습니다(예: 암호화된 쿠키).

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) OpenSSL::Digest::SHA1
7.0 OpenSSL::Digest::SHA256

config.active_support.use_authenticated_message_encryption

서명된 및 암호화된 메시지에 AES-256-CBC 암호화 대신 AES-256-GCM 인증 암호화를 사용할지 여부를 지정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
5.2 true

config.active_support.message_serializer

ActiveSupport::MessageEncryptorActiveSupport::MessageVerifier 인스턴스에서 사용할 기본 직렬화기를 지정합니다. 직렬화기 간 마이그레이션을 더 쉽게 하기 위해 제공된 직렬화기에는 여러 역직렬화 형식에 대한 폴백 메커니즘이 포함되어 있습니다:

직렬화기 직렬화 및 역직렬화 폴백 역직렬화
:marshal Marshal ActiveSupport::JSON, ActiveSupport::MessagePack
:json ActiveSupport::JSON ActiveSupport::MessagePack
:json_allow_marshal ActiveSupport::JSON ActiveSupport::MessagePack, Marshal
:message_pack ActiveSupport::MessagePack ActiveSupport::JSON
:message_pack_allow_marshal ActiveSupport::MessagePack ActiveSupport::JSON, Marshal

경고: 비밀 서명 키가 유출된 경우 Marshal은 역직렬화 공격의 잠재적 벡터입니다. 가능하면 Marshal을 지원하지 않는 직렬화기를 선택하세요.

정보: :message_pack:message_pack_allow_marshal 직렬화기는 JSON에서 지원되지 않는 일부 Ruby 유형(예: Symbol)에 대한 라운드트립을 지원하며 성능과 페이로드 크기가 향상될 수 있습니다. 그러나 msgpack gem이 필요합니다.

각 직렬화기는 대체 역직렬화 형식으로 폴백할 때마다 message_serializer_fallback.active_support 이벤트 알림을 내보내, 이러한 폴백이 얼마나 자주 발생하는지 추적할 수 있습니다.

또한 dumpload 메서드를 구현하는 모든 직렬화기 객체를 지정할 수 있습니다. 예:

config.active_support.message_serializer = YAML

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :marshal
7.1 :json_allow_marshal

config.active_support.use_message_serializer_for_metadata

true이면 메시지 데이터와 메타데이터를 함께 직렬화하는 성능 최적화를 활성화합니다. 이렇게 하면 메시지 형식이 변경되므로 이 방식으로 직렬화된 메시지는 이전 버전(< 7.1)의 Rails에서 읽을 수 없습니다. 그러나 이전 형식의 메시지는 이 최적화가 활성화되어 있는지 여부에 관계없이 계속 읽을 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.1 true

config.active_support.cache_format_version

캐시에 사용할 직렬화 형식을 지정합니다. 가능한 값은 7.07.1입니다.

7.0은 캐시 항목을 더 효율적으로 직렬화합니다.

7.1은 효율성을 더 높이고 값을 역직렬화하지 않고도 만료되거나 버전이 일치하지 않는 캐시 항목을 감지할 수 있습니다. 또한 뷰 조각과 같은 순수 문자열 값에 대한 최적화를 포함합니다.

모든 형식은 이전 및 이후 버전과 호환되므로 한 형식에서 다른 형식으로 마이그레이션할 때 전체 캐시를 무효화할 필요가 없습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
7.0 7.0
7.1 7.1

config.active_support.deprecation

감가상각 경고의 동작을 구성합니다. Deprecation::Behavior에서 사용 가능한 옵션에 대한 설명을 참조하세요.

기본 생성된 config/environments 파일에서 이 값은 개발 환경에서 :log, 테스트 환경에서 :stderr로 설정되며, 프로덕션 환경에서는 config.active_support.report_deprecations를 대신 사용합니다.

config.active_support.disallowed_deprecation

허용되지 않는 감가상각 경고의 동작을 구성합니다. Deprecation::Behavior에서 사용 가능한 옵션에 대한 설명을 참조하세요.

기본 생성된 config/environments 파일에서 이 값은 개발 및 테스트 환경 모두에서 :raise로 설정되며, 프로덕션 환경에서는 config.active_support.report_deprecations를 대신 사용합니다.

config.active_support.disallowed_deprecation_warnings

애플리케이션에서 허용되지 않는 감가상각 경고를 구성합니다. 이를 통해 특정 감가상각을 심각한 오류로 처리할 수 있습니다.

config.active_support.report_deprecations

false이면 애플리케이션의 감가상각기에서 모든 감가상각 경고를 비활성화합니다. 이에는 Rails와 다른 gem에서 추가한 모든 감가상각기가 포함되지만 ActiveSupport::Deprecation에서 발생한 모든 감가상각 경고를 방지하지는 않습니다.

기본 생성된 config/environments 파일에서 이 값은 프로덕션 환경에서 false로 설정됩니다.

config.active_support.isolation_level

Rails의 대부분의 내부 상태에 대한 로컬리티를 구성합니다. 파이버 기반 서버 또는 작업 프로세서(예: falcon)를 사용하는 경우 :fiber로 설정해야 합니다. 그렇지 않으면 :thread 로컬리티를 사용하는 것이 가장 좋습니다. 기본값은 :thread입니다.

config.active_support.executor_around_test_case

테스트 스위트가 Rails.application.executor.wrap을 테스트 케이스 주변에 호출하도록 구성합니다. 이렇게 하면 테스트 케이스가 실제 요청 또는 작업과 유사하게 동작합니다. 일반적으로 테스트에서 비활성화되는 Active Record 쿼리 캐시 및 비동기 쿼리와 같은 여러 기능이 활성화됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.0 true

ActiveSupport::Logger.silencer

로깅 블록에서 로깅을 비활성화할 수 있는 기능을 false로 설정합니다. 기본값은 true입니다.

ActiveSupport::Cache::Store.logger

캐시 저장소 작업 내에서 사용할 로거를 지정합니다.

ActiveSupport.utc_to_local_returns_utc_offset_times

ActiveSupport::TimeZone.utc_to_local이 오프셋이 포함된 시간을 반환하도록 구성합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
6.1 true

config.active_support.raise_on_invalid_cache_expiration_time

Rails.cache fetch 또는 write에 잘못된 expires_at 또는 expires_in 시간이 제공된 경우 ArgumentError를 발생시킬지 여부를 지정합니다.

옵션은 truefalse입니다. false이면 예외가 처리되어 대신 로그에 기록됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.1 true네, 계속해서 번역하겠습니다.

Active Job 구성

config.active_job에는 다음과 같은 구성 옵션이 제공됩니다:

config.active_job.queue_adapter

큐잉 백엔드에 대한 어댑터를 설정합니다. 기본 어댑터는 :async입니다. 사용 가능한 내장 어댑터의 최신 목록은 ActiveJob::QueueAdapters API 문서를 참조하세요.

# 어댑터의 gem이 Gemfile에 있고 어댑터별 설치 및 배포 지침을 따르세요.
config.active_job.queue_adapter = :sidekiq

config.active_job.default_queue_name

기본 큐 이름을 변경할 수 있습니다. 기본값은 "default"입니다.

config.active_job.default_queue_name = :medium_priority

config.active_job.queue_name_prefix

모든 작업에 대한 선택적이고 비어 있지 않은 큐 이름 접두사를 설정할 수 있습니다. 기본값은 빈 문자열이며 사용되지 않습니다.

다음 구성을 사용하면 프로덕션 환경에서 제공된 작업이 production_high_priority 큐에 대기됩니다:

config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base
  queue_as :high_priority
  #....
end

config.active_job.queue_name_delimiter

기본값은 '_'입니다. queue_name_prefix가 설정된 경우 queue_name_delimiter는 접두사와 접두사가 아닌 큐 이름을 연결합니다.

다음 구성을 사용하면 제공된 작업이 video_server.low_priority 큐에 대기됩니다:

# 접두사가 설정되어야 구분 기호가 사용됩니다
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
  queue_as :low_priority
  #....
end

config.active_job.enqueue_after_transaction_commit

Active Job의 #perform_later 및 유사한 메서드가 현재 Active Record 트랜잭션 커밋 후 자동으로 작업 대기를 연기할지 여부를 제어합니다.

다음 값으로 설정할 수 있습니다:

  • :never - 대기를 절대 연기하지 않습니다.
  • :always - 항상 대기를 연기합니다.
  • :default - 큐 어댑터가 동작을 정의하도록 합니다.

Active Record와 동일한 데이터베이스를 큐로 사용하는 Active Job 백엔드는 일반적으로 연기를 방지해야 하며, 다른 백엔드는 허용해야 합니다.

예:

Topic.transaction do
  topic = Topic.create(title: "New Topic")
  NewTopicNotificationJob.perform_later(topic)
end

이 예에서 구성이 :never로 설정된 경우 트랜잭션이 커밋되기 전에 작업이 대기됩니다. 따라서 작업이 거의 즉시 선택되거나 트랜잭션이 성공하지 않으면 데이터베이스에서 이 주제를 찾을 수 없어 작업이 실패합니다.

:always로 설정된 경우 트랜잭션이 커밋된 후에 작업이 실제로 대기됩니다. 트랜잭션이 롤백되면 작업이 대기되지 않습니다.

이 구성은 개별 작업 클래스에서도 설정할 수 있습니다:

class SomeJob < ApplicationJob
  self.enqueue_after_transaction_commit = :never
end
버전 시작 기본값
(원본) :never
7.2 :default

config.active_job.logger

Active Job에서 사용할 로거를 허용합니다. Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 사용할 수 있습니다. Active Job 클래스 또는 Active Job 인스턴스에서 logger를 호출하여 이 로거를 검색할 수 있습니다. nil로 설정하면 로깅이 비활성화됩니다.

config.active_job.custom_serializers

사용자 정의 인수 직렬화기를 설정할 수 있습니다. 기본값은 []입니다.

config.active_job.log_arguments

작업 인수를 로그할지 여부를 제어합니다. 기본값은 true입니다.

config.active_job.verbose_enqueue_logs

작업을 대기열에 넣는 메서드의 소스 위치가 관련 대기열 로그 줄 아래에 기록되어야 하는지 여부를 지정합니다. 기본적으로 이 플래그는 개발 환경에서 true, 다른 모든 환경에서 false입니다.

config.active_job.retry_jitter

실패한 작업을 다시 시도할 때 계산된 지연 시간에 적용되는 “지터”(무작위 변동) 양을 제어합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) 0.0
6.1 0.15

config.active_job.log_query_tags_around_perform

작업 컨텍스트에 대한 쿼리 태그가 around_perform을 통해 자동으로 업데이트되어야 하는지 여부를 결정합니다. 기본값은 true입니다.

Action Cable 구성

config.action_cable.url

Action Cable 서버를 호스팅하는 URL을 허용합니다. 메인 애플리케이션 프로세스와 분리된 Action Cable 서버를 실행하는 경우 이 옵션을 사용할 수 있습니다.

config.action_cable.mount_path

메인 서버 프로세스의 일부로 Action Cable을 마운트할 위치를 허용합니다. 기본값은 /cable입니다. 이 값을 nil로 설정하면 Action Cable이 일반 Rails 서버의 일부로 마운트되지 않습니다.

자세한 구성 옵션은 Action Cable 개요에서 확인할 수 있습니다.

config.action_cable.precompile_assets

Action Cable 자산을 자산 파이프라인 프리컴파일에 추가할지 여부를 결정합니다. Sprockets를 사용하지 않는 경우 영향이 없습니다. 기본값은 true입니다.

Active Storage 구성

config.active_storage에는 다음과 같은 구성 옵션이 제공됩니다:

config.active_storage.variant_processor

변형 변환 및 blob 분석을 MiniMagick 또는 ruby-vips로 수행할지 여부를 :mini_magick 또는 :vips 기호로 지정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) :mini_magick
7.0 :vips

config.active_storage.analyzers

Active Storage blob에 사용 가능한 분석기 클래스 배열을 허용합니다. 기본적으로 다음과 같이 정의됩니다:

config.active_storage.analyzers = [ActiveStorage::Analyzer::ImageAnalyzer::Vips, ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick, ActiveStorage::Analyzer::VideoAnalyzer, ActiveStorage::Analyzer::AudioAnalyzer]

이미지 분석기는 이미지 blob의 너비와 높이를 추출할 수 있고, 비디오 분석기는 비디오 blob의 너비, 높이, 지속 시간, 각도, 종횡비, 오디오/비디오 채널 유무를 추출할 수 있으며, 오디오 분석기는 오디오 blob의 지속 시간과 비트 전송률을 추출할 수 있습니다.

config.active_storage.previewers

Active Storage blob에서 사용 가능한 이미지 미리보기 생성기 클래스 배열을 허용합니다. 기본적으로 다음과 같이 정의됩니다:

config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]

PopplerPDFPreviewerMuPDFPreviewer는 PDF blob의 첫 페이지에서 축소판을 생성할 수 있고, VideoPreviewer는 비디오 blob의 관련 프레임에서 축소판을 생성할 수 있습니다.

config.active_storage.paths

미리보기기/분석기 명령의 위치를 나타내는 옵션 해시입니다. 기본값은 {}이며, 명령은 기본 경로에서 찾습니다. 다음 옵션 중 하나를 포함할 수 있습니다:

  • :ffprobe - ffprobe 실행 파일의 위치입니다.
  • :mutool - mutool 실행 파일의 위치입니다.
  • :ffmpeg - ffmpeg 실행 파일의 위치입니다.
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'

config.active_storage.variable_content_types

Active Storage가 변형 프로세서를 통해 변환할 수 있는 콘텐츠 유형 배열을 허용합니다. 기본적으로 다음과 같이 정의됩니다:

config.active_storage.variable_content_types = %w(image/png image/gif image/jpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon image/webp image/avif image/heic image/heif)

config.active_storage.web_image_content_types

변형을 처리할 때 대체 PNG 형식으로 변환하지 않고 웹 이미지 콘텐츠 유형으로 간주할 수 있는 문자열 배열을 허용합니다. 예를 들어 애플리케이션에서 AVIF 변형을 사용하려면 이 배열에 image/avif를 추가할 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다: | 버전 시작 | 기본값 | | ——————— | ———————————————– | | (원본) | %w(image/png image/jpeg image/gif) | | 7.2 | %w(image/png image/jpeg image/gif image/webp) |

config.active_storage.content_types_to_serve_as_binary

Active Storage가 항상 첨부 파일로 제공할 콘텐츠 유형 배열을 허용합니다. 기본적으로 다음과 같이 정의됩니다:

config.active_storage.content_types_to_serve_as_binary = %w(text/html image/svg+xml application/postscript application/x-shockwave-flash text/xml application/xml application/xhtml+xml application/mathml+xml text/cache-manifest)

config.active_storage.content_types_allowed_inline

Active Storage가 인라인으로 제공하도록 허용하는 콘텐츠 유형 배열을 허용합니다. 기본적으로 다음과 같이 정의됩니다:

config.active_storage.content_types_allowed_inline = %w(image/webp image/avif image/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)

config.active_storage.queues.analysis

분석 작업에 사용할 Active Job 큐를 지정하는 기호입니다. 이 옵션이 nil이면 분석 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다.

기본값은 config.load_defaults 대상 버전에 네, 계속해서 번역하겠습니다.

config.active_storage.queues.analysis

따라 다릅니다:

버전 시작 기본값
6.0 :active_storage_analysis
6.1 nil

config.active_storage.queues.mirror

직접 업로드 미러링 작업에 사용할 Active Job 큐를 지정하는 기호입니다. 이 옵션이 nil이면 미러링 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다. 기본값은 nil입니다.

config.active_storage.queues.preview_image

이미지 미리보기 전처리 작업에 사용할 Active Job 큐를 지정하는 기호입니다. 이 옵션이 nil이면 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다. 기본값은 nil입니다.

config.active_storage.queues.purge

정리 작업에 사용할 Active Job 큐를 지정하는 기호입니다. 이 옵션이 nil이면 정리 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
6.0 :active_storage_purge
6.1 nil

config.active_storage.queues.transform

변형 전처리 작업에 사용할 Active Job 큐를 지정하는 기호입니다. 이 옵션이 nil이면 작업이 기본 Active Job 큐(참조: config.active_job.default_queue_name)로 전송됩니다. 기본값은 nil입니다.

config.active_storage.logger

Active Storage에서 사용할 로거를 설정할 수 있습니다. Log4r 또는 기본 Ruby Logger 클래스 인터페이스를 준수하는 로거를 허용합니다.

config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)

config.active_storage.service_urls_expire_in

다음에서 생성된 URL의 기본 만료 시간을 결정합니다:

기본값은 5분입니다.

config.active_storage.urls_expire_in

Rails 애플리케이션에서 Active Storage가 생성하는 URL의 기본 만료 시간을 결정합니다. 기본값은 nil입니다.

config.active_storage.touch_attachment_records

ActiveStorage::Attachments가 관련 레코드를 업데이트할 때 해당 레코드를 터치하도록 지시합니다. 기본값은 true입니다.

config.active_storage.routes_prefix

Active Storage에서 제공하는 경로의 경로 접두사를 설정할 수 있습니다. 생성된 경로에 접두사로 추가될 문자열을 허용합니다.

config.active_storage.routes_prefix = '/files'

기본값은 /rails/active_storage입니다.

config.active_storage.track_variants

변형이 데이터베이스에 기록되는지 여부를 결정합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
6.1 true

config.active_storage.draw_routes

Active Storage 경로 생성을 전환할 수 있습니다. 기본값은 true입니다.

config.active_storage.resolve_model_to_route

Active Storage 파일 전달 방식을 전역적으로 변경할 수 있습니다.

허용되는 값은 다음과 같습니다:

  • :rails_storage_redirect: 서명된 단기 서비스 URL로 리디렉션합니다.
  • :rails_storage_proxy: 파일을 다운로드하여 프록시합니다.

기본값은 :rails_storage_redirect입니다.

config.active_storage.video_preview_arguments

ffmpeg가 비디오 미리보기 이미지를 생성하는 방식을 변경할 수 있습니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) "-y -vframes 1 -f image2"
7.0 "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015)"1
+ ",loop=loop=-1:size=2,trim=start_frame=1'"2
+ " -frames:v 1 -f image2"

  1. 첫 번째 비디오 프레임, 키프레임, 장면 변경 임계값을 충족하는 프레임을 선택합니다.
  2. 첫 번째(하나 또는 두 개의) 선택된 프레임을 루프하고 첫 번째 루프된 프레임을 삭제하여 대체 프레임을 제공합니다.

config.active_storage.multiple_file_field_include_hidden

Rails 7.1 이상에서 Active Storage has_many_attached 관계는 기본적으로 현재 컬렉션을 대체하는 대신 추가합니다. 따라서 빈 컬렉션을 제출하려면 multiple_file_field_include_hiddentrue이면 file_field 헬퍼가 check_box 헬퍼가 렌더링하는 것과 유사한 보조 숨겨진 필드를 렌더링합니다.

기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값
(원본) false
7.0 true

config.active_storage.precompile_assets

Active Storage 자산을 자산 파이프라인 프리컴파일에 추가할지 여부를 결정합니다. Sprockets를 사용하지 않는 경우 영향이 없습니다. 기본값은 true입니다.

Action Text 구성

config.action_text.attachment_tag_name

첨부 파일에 사용할 HTML 태그를 허용합니다. 기본값은 "action-text-attachment"입니다.

config.action_text.sanitizer_vendor

Action Text에서 사용할 HTML 세니타이저를 ActionText::ContentHelper.sanitizer에 설정하여 구성합니다. 벤더의 .safe_list_sanitizer 메서드에서 반환된 클래스의 인스턴스로 설정됩니다. 기본값은 config.load_defaults 대상 버전에 따라 다릅니다:

버전 시작 기본값 마크업을 어떻게 구문 분석하는지
(원본) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (참고 참조) HTML5

참고: Rails::HTML5::Sanitizer는 JRuby에서 지원되지 않으므로 JRuby 플랫폼에서는 Rails::HTML4::Sanitizer로 대체됩니다.

데이터베이스 구성

거의 모든 Rails 애플리케이션은 데이터베이스와 상호 작용합니다. ENV['DATABASE_URL'] 환경 변수 또는 config/database.yml이라는 구성 파일을 사용하여 데이터베이스에 연결할 수 있습니다.

config/database.yml 파일을 사용하면 데이터베이스에 액세스하는 데 필요한 모든 정보를 지정할 수 있습니다:

development:
  adapter: postgresql
  database: blog_development
  pool: 5

이렇게 하면 blog_development 데이터베이스에 postgresql 어댑터를 사용하여 연결됩니다. 이 정보는 다음과 같은 URL 형식으로 환경 변수에 저장할 수도 있습니다:

ENV['DATABASE_URL'] # => "postgresql://localhost/blog_development?pool=5"

config/database.yml 파일에는 Rails가 기본적으로 실행되는 세 가지 다른 환경에 대한 섹션이 포함되어 있습니다:

  • development 환경은 수동으로 애플리케이션과 상호 작용할 때 사용됩니다.
  • test 환경은 자동화된 테스트를 실행할 때 사용됩니다.
  • production 환경은 애플리케이션을 배포할 때 사용됩니다.

원하는 경우 config/database.yml 파일 내에 URL을 수동으로 지정할 수 있습니다.

development:
  url: postgresql://localhost/blog_development?pool=5

config/database.yml 파일에는 ERB 태그 <%= %>가 포함될 수 있습니다. 태그 내부의 모든 내용은 Ruby 코드로 평가됩니다. 환경 변수에서 데이터를 가져오거나 필요한 연결 정보를 생성하는 데 사용할 수 있습니다.

ENV['DATABASE_URL'] 또는 config/database.yml 파일의 url 키를 사용할 때 Rails는 URL의 프로토콜을 애플리케이션 내에서 구성할 수 있는 데이터베이스 어댑터에 매핑할 수 있습니다. 이를 통해 URL에 지정된 어댑터를 수정하지 않고도 어댑터를 구성할 수 있습니다. 참조: config.active_record.protocol_adapters.

팁: 데이터베이스 구성을 수동으로 업데이트할 필요가 없습니다. 애플리케이션 생성기의 옵션을 살펴보면 --database 이름의 옵션이 있습니다. 이 옵션을 사용하면 가장 많이 사용되는 관계형 데이터베이스 중에서 어댑터를 선택할 수 있습니다. 생성기를 반복해서 실행할 수도 있습니다: cd .. && rails new blog --database=mysql. config/database.yml 파일의 덮어쓰기를 확인하면 애플리케이션이 SQLite 대신 MySQL로 구성됩니다. 일반적인 데이터베이스 연결의 자세한 예는 아래에 나와 있습니다.

연결 우선순위

두 가지 방법으로 연결을 구성할 수 있기 때문에(config/database.yml 사용 또는 환경 변수 사용) 이들이 어떻게 상호 작용하는지 이해하는 것이 중요합니다.

config/database.yml 파일이 비어 있지만 ENV['DATABASE_URL']이 있는 경우 Rails는 환경 변수를 통해 데이터베이스에 연결합니다:

$ cat config/database.yml

$ echo $DATABASE_URL
postgresql://localhost/my_database

config/database.yml은 있지만 ENV['DATABASE_URL']은 없는 경우 이 파일이 사용되어 데이터베이스에 연결됩네, 계속해서 번역하겠습니다.

연결 우선순위

니다:

$ cat config/database.yml
development:
  adapter: sqlite3
  database: NOT_my_database
  host: localhost

$ echo $DATABASE_URL

config/database.ymlENV['DATABASE_URL']이 모두 있는 경우 Rails는 구성을 병합합니다. 이해를 돕기 위해 몇 가지 예를 살펴보겠습니다.

중복된 연결 정보가 제공되면 환경 변수가 우선합니다:

$ cat config/database.yml
development:
  adapter: sqlite3
  database: NOT_my_database
  host: localhost

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost"}
    @url="postgresql://localhost/my_database">
  ]

여기서 어댑터, 호스트 및 데이터베이스는 ENV['DATABASE_URL']의 정보와 일치합니다.

중복되지 않는 정보가 제공되면 고유한 모든 값이 얻어지며, 충돌하는 경우 환경 변수가 여전히 우선합니다.

$ cat config/database.yml
development:
  adapter: sqlite3
  pool: 5

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost", "pool"=>5}
    @url="postgresql://localhost/my_database">
  ]

pool은 ENV['DATABASE_URL']에 제공된 연결 정보에 없으므로 병합됩니다. adapter는 중복되므로 ENV['DATABASE_URL'] 연결 정보가 우선합니다.

ENV['DATABASE_URL']의 연결 정보를 명시적으로 사용하지 않으려면 "url" 하위 키를 사용하여 명시적 URL 연결을 지정하면 됩니다:

$ cat config/database.yml
development:
  url: sqlite3:NOT_my_database

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
  #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
    @env_name="development", @spec_name="primary",
    @config={"adapter"=>"sqlite3", "database"=>"NOT_my_database"}
    @url="sqlite3:NOT_my_database">
  ]

여기서 ENV['DATABASE_URL']의 연결 정보가 무시되며, 어댑터와 데이터베이스 이름이 다릅니다.

config/database.yml에 ERB를 포함할 수 있으므로 ENV['DATABASE_URL']만 사용하여 데이터베이스에 연결하는 것이 가장 좋습니다. 이는 프로덕션에서 데이터베이스 비밀번호와 같은 비밀을 소스 제어(예: Git)에 커밋하지 않아야 하는 경우에 특히 유용합니다.

$ cat config/database.yml
production:
  url: <%= ENV['DATABASE_URL'] %>

이제 동작이 명확해졌으며, ENV['DATABASE_URL']의 연결 정보만 사용하고 있습니다.

SQLite3 데이터베이스 구성

Rails에는 SQLite3에 대한 기본 지원이 내장되어 있습니다. SQLite는 경량 서버리스 데이터베이스 애플리케이션입니다. 프로덕션 환경이 바쁜 경우 SQLite를 과적할 수 있지만 개발 및 테스트에는 잘 작동합니다. Rails는 새 프로젝트를 만들 때 기본적으로 SQLite 데이터베이스를 사용하지만 나중에 변경할 수 있습니다.

다음은 개발 환경에 대한 기본 구성 파일(config/database.yml)의 연결 정보 섹션입니다:

development:
  adapter: sqlite3
  database: storage/development.sqlite3
  pool: 5
  timeout: 5000

참고: Rails는 기본적으로 구성이 필요 없는 SQLite3 데이터베이스를 데이터 저장소로 사용합니다. Rails는 MySQL(MariaDB 포함) 및 PostgreSQL을 “기본적으로” 지원하며 많은 데이터베이스 시스템에 대한 플러그인이 있습니다. 프로덕션 환경에서 데이터베이스를 사용하는 경우 Rails에는 해당 어댑터가 있을 가능성이 높습니다.

MySQL 또는 MariaDB 데이터베이스 구성

SQLite3 데이터베이스 대신 MySQL 또는 MariaDB를 선택하는 경우 config/database.yml이 약간 다릅니다. 다음은 개발 섹션입니다:

development:
  adapter: mysql2
  encoding: utf8mb4
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

개발 데이터베이스에 빈 암호의 루트 사용자가 있는 경우 이 구성이 작동합니다. 그렇지 않은 경우 development 섹션의 사용자 이름과 비밀번호를 적절하게 변경하세요.

참고: MySQL 버전이 5.5 또는 5.6이고 utf8mb4 문자 집합을 기본적으로 사용하려면 innodb_large_prefix 시스템 변수를 활성화하여 MySQL 서버가 더 긴 키 접두사를 지원하도록 구성해야 합니다.

자문 잠금은 기본적으로 MySQL에 활성화되어 있으며 마이그레이션을 동시에 안전하게 만드는 데 사용됩니다. PgBouncer와 같은 외부 연결 풀러를 사용하는 경우 이 기능을 비활성화해야 할 수 있습니다:

production:
  adapter: mysql2
  advisory_locks: false

PostgreSQL 데이터베이스 구성

PostgreSQL을 선택하는 경우 config/database.yml이 PostgreSQL 데이터베이스를 사용하도록 사용자 정의됩니다:

development:
  adapter: postgresql
  encoding: unicode
  database: blog_development
  pool: 5

기본적으로 Active Record는 준비된 문과 자문 잠금과 같은 데이터베이스 기능을 사용합니다. PgBouncer와 같은 외부 연결 풀러를 사용하는 경우 이러한 기능을 비활성화해야 할 수 있습니다:

production:
  adapter: postgresql
  prepared_statements: false
  advisory_locks: false

활성화된 경우 Active Record는 기본적으로 데이터베이스 연결당 최대 1000개의 준비된 문을 만듭니다. 이 동작을 수정하려면 statement_limit을 다른 값으로 설정할 수 있습니다:

production:
  adapter: postgresql
  statement_limit: 200

준비된 문을 더 많이 사용하면 데이터베이스에 더 많은 메모리가 필요합니다. PostgreSQL 데이터베이스가 메모리 제한에 도달하는 경우 statement_limit을 낮추거나 준비된 문을 비활성화해 보세요.

JRuby 플랫폼에서 SQLite3 데이터베이스 구성

SQLite3을 선택하고 JRuby를 사용하는 경우 config/database.yml이 약간 다릅니다. 다음은 개발 섹션입니다:

development:
  adapter: jdbcsqlite3
  database: storage/development.sqlite3

JRuby 플랫폼에서 MySQL 또는 MariaDB 데이터베이스 구성

MySQL 또는 MariaDB를 선택하고 JRuby를 사용하는 경우 config/database.yml이 약간 다릅니다. 다음은 개발 섹션입니다:

development:
  adapter: jdbcmysql
  database: blog_development
  username: root
  password:

JRuby 플랫폼에서 PostgreSQL 데이터베이스 구성

PostgreSQL을 선택하고 JRuby를 사용하는 경우 config/database.yml이 약간 다릅니다. 다음은 개발 섹션입니다:

development:
  adapter: jdbcpostgresql
  encoding: unicode
  database: blog_development
  username: blog
  password:

사용자 이름과 비밀번호를 development 섹션에 적절하게 변경하세요.

메타데이터 저장 구성

기본적으로 Rails는 Rails 환경 및 스키마에 대한 정보를 ar_internal_metadata라는 내부 테이블에 저장합니다.

연결별로 use_metadata_table을 설정하여 이 기능을 끌 수 있습니다. 공유 데이터베이스 및/또는 테이블을 만들 수 없는 데이터베이스 사용자와 작업할 때 유용합니다.

development:
  adapter: postgresql
  use_metadata_table: false

재시도 동작 구성

기본적으로 Rails는 자동으로 데이터베이스 서버에 다시 연결하고 문제가 발생하면 특정 쿼리를 다시 시도합니다. 안전하게 다시 시도할 수 있는(멱등) 쿼리만 다시 시도됩니다. 재시도 횟수는 데이터베이스 구성의 connection_retries에 지정할 수 있으며, 값을 0으로 설정하면 비활성화됩니다. 기본 재시도 횟수는 1회입니다.

development:
  adapter: mysql2
  connection_retries: 3

데이터베이스 구성에는 retry_deadline도 구성할 수 있습니다. retry_deadline이 구성된 경우 다시 시도할 수 있는 쿼리라도 첫 번째 시도 이후 지정된 시간이 경과하면 다시 시도되지 않습니다. 예를 들어 retry_deadline이 5초로 설정된 경우 5초가 경과하면 멱등 쿼리라도 다시 시도되지 않습니다.

이 값은 기본적으로 nil이며, 이는 모든 다시 시도 가능한 쿼리가 경과 시간에 관계없이 다시 시도됨을 의미합니다. 이 구성은 초 단위로 지정해야 합니다.

development:
  adapter: mysql2
  retry_deadline: 5 # 5초 후 쿼리 재시도 중지

쿼리 캐시 구성

기본적으로 Rails는 쿼리에 의해 반환된 결과 집합을 자동으로 캐시합니다. Rails가 동일한 쿼리를 요청 또는 작업 중에 다시 만나면 데이터베이스에 다시 쿼리하는 대신 캐시된 결과 집합을 사용합니다.

쿼리 캐시는 메모리에 저장되며, 메모리 사용량이 너무 많아지지 않도록 최근에 사용되지 않은 쿼리를 자동으로 제거합니다. 기본 임계값은 100이지만 database.yml에서 구성할 수 있습니다.

development:
  adapter: mysql2
  query_cache: 200

쿼리 캐싱을 완전히 비활성화하려면 false로 설정할 수 있습니다.

development:
  adapter: mysql2
  query_cache: false

Rails 환경 만들기

기본적으로 Rails는 “development”, “test” 및 “production"의 세 가지 환경을 제공합니다. 이것으로 대부분의 경우에 충분하지만 때로는 더 많은 환경이 필요할 수 있습니다.

프로덕션 환경을 미러링하지만 테스트에만 사용되는 서버가 있다고 가정해 보겠습니다. 이네, 계속해서 번역하겠습니다.

Rails 환경 만들기

러한 서버를 "스테이징 서버"라고 합니다. "staging” 환경을 정의하려면 config/environments/staging.rb라는 파일을 만들면 됩니다. 이것은 프로덕션과 유사한 환경이므로 config/environments/production.rb의 내용을 복사하여 시작하고 필요한 변경 사항을 수행할 수 있습니다. 다른 환경 구성을 요구하고 확장할 수도 있습니다:

# config/environments/staging.rb
require_relative "production"

Rails.application.configure do
  # 스테이징 재정의
end

해당 환경은 기본 환경과 다르지 않습니다. bin/rails server -e staging으로 서버를 시작하고, bin/rails console -e staging으로 콘솔을 시작하며, Rails.env.staging?이 작동합니다.

하위 디렉토리(상대 URL 루트)에 배포

기본적으로 Rails는 애플리케이션이 루트(예: /)에서 실행된다고 가정합니다. 이 섹션에서는 디렉토리 내에서 애플리케이션을 실행하는 방법을 설명합니다.

우리가 애플리케이션을 “/app1"에 배포하고 싶다고 가정해 보겠습니다. Rails는 적절한 경로를 생성하기 위해 이 디렉토리를 알아야 합니다:

config.relative_url_root = "/app1"

또는 RAILS_RELATIVE_URL_ROOT 환경 변수를 설정할 수 있습니다.

Rails는 이제 ”/app1"을 접두사로 추가하여 링크를 생성합니다.

Passenger 사용

Passenger를 사용하면 애플리케이션을 하위 디렉토리에서 실행하기 쉽습니다. 관련 구성은 Passenger 매뉴얼에서 찾을 수 있습니다.

역방향 프록시 사용

역방향 프록시를 사용하여 애플리케이션을 배포하는 것은 전통적인 배포 방식에 비해 확실한 이점이 있습니다. 이를 통해 캐싱 서버 또는 애플리케이션 서버와 같은 구성 요소를 계층화하여 서버에 대한 더 많은 제어 기능을 제공할 수 있습니다.

많은 현대적인 웹 서버를 역방향 프록시 서버로 사용할 수 있습니다.

이 경우 애플리케이션 서버(Unicorn)를 역방향 프록시 뒤에서 실행할 수 있습니다.

이 경우 프록시 서버(NGINX, Apache 등)를 구성하여 애플리케이션 서버(Unicorn)에서 연결을 수락하도록 해야 합니다. 기본적으로 Unicorn은 포트 8080에서 TCP 연결을 수신하지만 포트를 변경하거나 소켓을 사용하도록 구성할 수 있습니다.

Unicorn readme에서 자세한 내용을 확인하고 철학을 이해할 수 있습니다.

애플리케이션 서버를 구성했으면 웹 서버를 적절하게 구성하여 요청을 프록시해야 합니다. 예를 들어 NGINX 구성은 다음과 같을 수 있습니다:

upstream application_server {
  server 0.0.0.0:8080;
}

server {
  listen 80;
  server_name localhost;

  root /root/path/to/your_app/public;

  try_files $uri/index.html $uri.html @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://application_server;
  }

  # 기타 구성
}

최신 정보는 NGINX 문서를 참조하세요.

Rails 환경 설정

Rails의 일부 부분은 환경 변수를 제공하여 외부에서 구성할 수도 있습니다. 다음과 같은 환경 변수가 Rails의 다양한 부분에서 인식됩니다:

  • ENV["RAILS_ENV"]는 Rails가 실행될 Rails 환경(production, development, test 등)을 정의합니다.

  • ENV["RAILS_RELATIVE_URL_ROOT"]애플리케이션을 하위 디렉토리에 배포할 때 Rails 라우팅이 URL을 인식하는 데 사용됩니다.

  • ENV["RAILS_CACHE_ID"]ENV["RAILS_APP_VERSION"]은 Rails 캐싱 코드에서 확장된 캐시 키를 생성하는 데 사용됩니다. 이를 통해 동일한 애플리케이션에서 별도의 캐시를 가질 수 있습니다.

초기화기 파일 사용

프레임워크와 애플리케이션의 모든 gem을 로드한 후 Rails는 초기화기로 전환됩니다. 초기화기는 애플리케이션의 config/initializers 디렉토리에 있는 모든 Ruby 파일입니다. 이러한 부분에서 이러한 부분에 대한 옵션과 같은 구성 설정을 지정할 수 있습니다.

config/initializers(및 config/initializers의 모든 하위 디렉토리)의 파일은 load_config_initializers 초기화기의 일부로 정렬되어 하나씩 로드됩니다.

초기화기에 다른 초기화기의 코드에 의존하는 코드가 있는 경우 단일 초기화기로 결합할 수 있습니다. 이렇게 하면 종속성이 더 명시적해지고 애플리케이션 내에서 새 개념을 부각시킬 수 있습니다. Rails는 또한 초기화기 파일 이름에 번호를 지정하는 것을 지원하지만 이로 인해 파일 이름이 변경될 수 있습니다. require를 사용하여 명시적으로 초기화기를 로드하는 것은 권장되지 않습니다. 초기화기가 두 번 로드되기 때문입니다.

참고: 초기화기가 모든 gem 초기화기 후에 실행된다는 보장은 없으므로 특정 gem이 초기화되었다고 가정하는 초기화 코드는 config.after_initialize 블록에 배치해야 합니다.

로드 후크

Rails 코드는 애플리케이션 로드 시 자주 참조될 수 있습니다. Rails는 이러한 프레임워크의 로드 순서를 담당하므로 ActiveRecord::Base와 같은 프레임워크를 부팅 시 로드하면 애플리케이션의 암시적 계약을 위반하게 됩니다. 또한 애플리케이션 부팅 시 ActiveRecord::Base와 같은 코드를 로드하면 전체 프레임워크가 로드되어 부팅 성능이 저하되고 로드 순서 및 애플리케이션 부팅과 충돌할 수 있습니다.

로드 및 구성 후크는 Rails 초기화 프로세스에 후크를 거는 API이며, 이를 통해 Rails의 로드 계약을 위반하지 않고 이 프로세스에 후크를 걸 수 있습니다. 또한 부팅 성능 저하를 완화하고 부팅 시 충돌을 방지할 수 있습니다.

Rails 프레임워크 로드 피하기

Ruby는 동적 언어이므로 일부 코드로 인해 다른 Rails 프레임워크가 로드될 수 있습니다. 다음 스니펫을 살펴보겠습니다:

ActiveRecord::Base.include(MyActiveRecordHelper)

이 스니펫은 이 파일이 로드될 때 ActiveRecord::Base를 만나게 되며, Ruby는 해당 상수의 정의를 찾아 ActiveRecord 프레임워크 전체를 로드하게 됩니다.

ActiveSupport.on_load는 필요할 때까지 코드 로드를 연기할 수 있는 메커니즘입니다. 위의 스니펫은 다음과 같이 변경할 수 있습니다:

ActiveSupport.on_load(:active_record) do
  include MyActiveRecordHelper
end

이 새로운 스니펫은 ActiveRecord::Base가 로드될 때만 MyActiveRecordHelper를 포함합니다.

후크가 호출되는 시기

Rails 프레임워크에서 이러한 후크는 특정 라이브러리가 로드될 때 호출됩니다. 예를 들어 ActionController::Base가 로드되면 :action_controller_base 후크가 호출됩니다. 이는 모든 ActiveSupport.on_load 호출이 ActionController::Base 컨텍스트(즉, selfActionController::Base)에서 호출됨을 의미합니다.

코드 수정하여 로드 후크 사용

코드 수정은 일반적으로 간단합니다. ActiveRecord::Base와 같은 Rails 프레임워크를 참조하는 코드 줄이 있는 경우 해당 코드를 로드 후크로 래핑할 수 있습니다.

include 호출 수정

ActiveRecord::Base.include(MyActiveRecordHelper)

다음과 같이 변경됩니다:

ActiveSupport.on_load(:active_record) do
  # self는 여기서 ActiveRecord::Base를 참조하므로 .include를 호출할 수 있습니다
  include MyActiveRecordHelper
end

prepend 호출 수정

ActionController::Base.prepend(MyActionControllerHelper)

다음과 같이 변경됩니다:

ActiveSupport.on_load(:action_controller_base) do
  # self는 여기서 ActionController::Base를 참조하므로 .prepend를 호출할 수 있습니다
  prepend MyActionControllerHelper
end

클래스 메서드 호출 수정

ActiveRecord::Base.include_root_in_json = true

다음과 같이 변경됩니다:

ActiveSupport.on_load(:active_record) do
  # self는 여기서 ActiveRecord::Base를 참조합니다
  self.include_root_in_json = true
end

사용 가능한 로드 후크

애플리케이션 코드에서 사용할 수 있는 다음과 같은 로드 후크가 있습니다. 초기화 프로세스에 후크를 거는 데 사용할 수 있습니다.

클래스 후크
ActionCable action_cable
ActionCable::Channel::Base action_cable_channel
ActionCable::Connection::Base action_cable_connection
ActionCable::Connection::TestCase action_cable_connection_test_case
ActionController::API action_controller_api
ActionController::API action_controller
ActionController::Base action_controller_base
ActionController::Base action_controller
ActionController::TestCase action_controller_test_case
ActionDispatch::IntegrationTest action_dispatch_integration_test
ActionDispatch::Response action_dispatch_response
ActionDispatch::Request action_dispatch_request
ActionDispatch::SystemTestCase action_dispatch_system_test_case
ActionMailbox::Base action_mailbox
ActionMailbox::InboundEmail action_mailbox_inbound_email
ActionMailbox::Record action_mailbox_record
ActionMailbox::TestCase action_mailbox_test_case
ActionMailer::Base action_mailer
ActionMailer::TestCase action_mailer_test_case
ActionText::Content action_text_content
ActionText::Record action_text_record
`Action네, 계속해서 번역하겠습니다.

사용 가능한 로드 후크

Text::RichText|actiontextrichtext| |ActionText::EncryptedRichText|actiontextencryptedrichtext| |ActionView::Base|actionview| |ActionView::TestCase|actionviewtestcase| |ActiveJob::Base|activejob| |ActiveJob::TestCase|activejobtestcase| |ActiveModel::Model|activemodel| |ActiveRecord::Base|activerecord| |ActiveRecord::TestFixtures|activerecordfixtures| |ActiveRecord::ConnectionAdapters::PostgreSQLAdapter|activerecordpostgresqladapter| |ActiveRecord::ConnectionAdapters::Mysql2Adapter|activerecordmysql2adapter| |ActiveRecord::ConnectionAdapters::TrilogyAdapter|activerecordtrilogyadapter| |ActiveRecord::ConnectionAdapters::SQLite3Adapter|activerecordsqlite3adapter| |ActiveStorage::Attachment|activestorageattachment| |ActiveStorage::VariantRecord|activestoragevariantrecord| |ActiveStorage::Blob|activestorageblob| |ActiveStorage::Record|activestoragerecord| |ActiveSupport::TestCase|activesupporttest_case| |i18n|i18n` |

초기화 이벤트

Rails에는 다음과 같은 5가지 초기화 이벤트가 있으며, 이 이벤트에 후크를 걸 수 있습니다(실행 순서대로 나열):

  • before_configuration: 애플리케이션 상수가 Rails::Application에서 상속되자마자 실행됩니다. config 호출은 이 이벤트 전에 평가됩니다.

  • before_initialize: Rails 초기화 프로세스 직전에 실행됩니다. 이는 Rails 초기화 프로세스의 시작 부분에 있는 :bootstrap_hook 초기화기와 관련이 있습니다.

  • to_prepare: 모든 Railtie(애플리케이션 자체 포함)의 초기화기가 실행된 후 그리고 적극적 로드와 미들웨어 스택이 구축되기 전에 실행됩니다. 더 중요한 것은 development에서는 모든 코드 다시 로드 시마다 실행되지만 productiontest에서는 부팅 시 한 번만 실행된다는 것입니다.

  • before_eager_load: 적극적 로드가 발생하기 직전에 실행됩니다. 이는 production 환경에서 기본 동작이며 development 환경에서는 그렇지 않습니다.

  • after_initialize: 애플리케이션 초기화 직후, config/initializers의 애플리케이션 초기화기가 실행된 후에 실행됩니다.

이러한 후크를 정의하려면 Rails::Application, Rails::Railtie 또는 Rails::Engine 하위 클래스 내에서 블록 구문을 사용하세요:

module YourApp
  class Application < Rails::Application
    config.before_initialize do
      # 초기화 코드는 여기에 있습니다
    end
  end
end

또는 Rails.application.config 객체를 통해 수행할 수도 있습니다:

Rails.application.config.before_initialize do
  # 초기화 코드는 여기에 있습니다
end

경고: 라우팅과 같은 애플리케이션의 일부 부분은 after_initialize 블록이 호출되는 시점에 아직 설정되지 않습니다.

Rails::Railtie#initializer

Rails에는 시작 시 실행되는 많은 초기화기가 있으며, 이는 모두 Rails::Railtieinitializer 메서드를 사용하여 정의됩니다. Action Controller의 set_helpers_path 초기화기 예:

initializer "action_controller.set_helpers_path" do |app|
  ActionController::Helpers.helpers_path = app.helpers_paths
end

initializer 메서드는 초기화기의 이름, 옵션 해시(여기서는 표시되지 않음) 및 블록의 세 가지 인수를 사용합니다. :before 키는 이 새 초기화기가 실행되어야 하는 초기화기를 지정하는 데 사용되며, :after 키는 이 초기화기를 실행할 초기화기를 지정하는 데 사용됩니다.

initializer 메서드를 사용하여 정의된 초기화기는 정의된 순서대로 실행되지만, :before 또는 :after 메서드를 사용하는 경우는 예외입니다.

경고: 논리적으로 타당한 경우가 아니라면 초기화기를 다른 초기화기 앞이나 뒤에 배치할 수 있습니다. “one"부터 "four"까지 번호가 매겨진 4개의 초기화기가 있고 "four"를 "two” 앞이지만 “three” 뒤에 배치하려고 한다면 논리적이지 않으므로 Rails가 초기화기 순서를 결정할 수 없습니다.

initializer 메서드의 블록 인수는 애플리케이션 자체의 인스턴스이므로 config 메서드를 사용하여 구성에 액세스할 수 있습니다.

Rails::ApplicationRails::Railtie(간접적으로)에서 상속되기 때문에 config/application.rb에서 initializer 메서드를 사용하여 애플리케이션에 대한 초기화기를 정의할 수 있습니다.

초기화기

다음은 Rails에 있는 모든 초기화기의 전체 목록이며, 실행 순서대로 나열되어 있습니다(달리 명시되지 않는 한).

  • load_environment_hook: :load_environment_config가 정의되어 실행되기 전에 실행되도록 하는 자리 표시자입니다.

  • load_active_support: active_support/dependencies를 요구하여 Active Support의 기반을 설정합니다. config.active_support.bare가 거짓이면(기본값) active_support/all도 선택적으로 요구합니다.

  • initialize_logger: 애플리케이션에 대한 로거(an ActiveSupport::BroadcastLogger 객체)를 초기화하고 Rails.logger에서 사용할 수 있게 합니다. 단, 이 지점 이전에 초기화기가 Rails.logger를 정의하지 않은 경우에만 해당됩니다.

  • initialize_cache: Rails.cache가 아직 설정되지 않은 경우 config.cache_store 값을 참조하여 캐시를 초기화하고 결과를 Rails.cache에 저장합니다. 이 객체가 middleware 메서드에 응답하는 경우 Rack::Runtime 앞에 해당 미들웨어가 삽입됩니다.

  • set_clear_dependencies_hook: config.enable_reloadingtrue로 설정된 경우 실행되는 이 초기화기는 ActionDispatch::Callbacks.after를 사용하여 요청 중 참조된 상수를 객체 공간에서 제거하여 다음 요청 시 다시 로드되도록 합니다.

  • bootstrap_hook: 구성된 before_initialize 블록을 모두 실행합니다.

  • i18n.callbacks: 개발 환경에서는 로케일이 변경되면 I18n.reload!를 호출하는 to_prepare 콜백을 설정합니다. 프로덕션에서는 첫 번째 요청에서만 이 콜백이 실행됩니다.

  • active_support.deprecation_behavior: Rails.application.deprecators의 감가상각 보고 동작을 config.active_support.report_deprecations, config.active_support.deprecation, config.active_support.disallowed_deprecationconfig.active_support.disallowed_deprecation_warnings에 따라 설정합니다.

  • active_support.initialize_time_zone: config.time_zone 설정(기본값은 “UTC”)을 사용하여 애플리케이션의 기본 시간대를 설정합니다.

  • active_support.initialize_beginning_of_week: config.beginning_of_week 설정(기본값은 :monday)을 사용하여 애플리케이션의 기본 주 시작일을 설정합니다.

  • active_support.set_configs: config.active_support의 설정을 사용하여 Active Support를 설정합니다. ActiveSupport에 메서드 이름을 보내 setter로 사용하고 값을 전달합니다.

  • action_dispatch.configure: config.action_dispatch.tld_length를 사용하여 ActionDispatch::Http::URL.tld_length를 구성합니다.

  • action_view.set_configs: config.action_view의 설정을 사용하여 Action View를 설정합니다. ActionView::Base에 메서드 이름을 보내 setter로 사용하고 값을 전달합니다.

  • action_controller.assets_config: config.action_controller.assets_dir을 애플리케이션의 공용 디렉토리로 초기화합니다(명시적으로 구성되지 않은 경우).

  • action_controller.set_helpers_path: Action Controller의 helpers_path를 애플리케이션의 helpers_path로 설정합니다.

  • action_controller.parameters_config: ActionController::Parameters에 대한 강력 매개변수 옵션을 구성합니다.

  • action_controller.set_configs: config.action_controller의 설정을 사용하여 Action Controller를 설정합니다. ActionController::Base에 메서드 이름을 보내 setter로 사용하고 값을 전달합니다.

  • action_controller.compile_config_methods: 구성 설정에 대한 메서드를 초기화하여 더 빠르게 액세스할 수 있습니다.

  • active_record.initialize_timezone: ActiveRecord::Base.time_zone_aware_attributestrue로 설정하고 ActiveRecord::Base.default_timezone을 UTC로 설정합니다. 데이터베이스에서 속성을 읽을 때 Time.zone에 지정된 시간대로 변환됩니다.

  • active_record.logger: ActiveRecord::Base.logger가 아직 설정되지 않은 경우 Rails.logger로 설정합니다.

  • active_record.migration_error: 보류 중인 마이그레이션을 확인하는 미들웨어를 구성합니다.

  • active_record.check_schema_cache_dump: 구성되어 있고 사용 가능한 경우 스키마 캐시 덤프를 로드합니다.

  • active_record.warn_on_records_fetched_greater_than: 쿼리가 많은 수의 레코드를 반환할 때 경고를 활성화합니다.

  • active_record.set_configs: config.active_record의 설정을 사용하여 Active Record를 설정합니다. ActiveRecord::Base에 메서드 이름을 보내 setter로 사용하고 값을 전달합니다.

  • active_record.initialize_database: 기본적으로 config/database.yml에서 데이터베이스 구성을 로드하고 현재 환경에 대한 연결을 설정합니다.

  • active_record.log_runtime: ActiveRecord::Railties::ControllerRuntimeActiveRecord::Railties::JobRuntime을 포함하여 요청에 대한 Active Record 호출 시간을 로거에 보고합니다.

  • active_record.set_reloader_hooks: config.enable_reloadingtrue로 설정된 경우 데이터베이스에 대한 모든 재로드 가능한 연결을 재설정합니다.

  • active_record.add_watchable_files: schema.rbstructure.sql 파일을 감시 파일에 추가합니다.

  • active_job.logger: ActiveJob::Base.logger가 아직 설정되지 않은 경우 Rails.logger로 설정합니다.

  • active_job.set_configs: config.active_job의 설정을 사용하여 Active Job을 설정합니다. ActiveJob::Base에 메서드 이름을 보내 setter로 사용하고 값을 전달합니다.

  • action_mailer.logger: `네, 계속해서 번역하겠습니다.

초기화기

action_mailer.logger: ActionMailer::Base.logger가 아직 설정되지 않은 경우 Rails.logger로 설정합니다.

  • action_mailer.set_configs: config.action_mailer의 설정을 사용하여 Action Mailer를 설정합니다. ActionMailer::Base에 메서드 이름을 보내 setter로 사용하고 값을 전달합니다.

  • action_mailer.compile_config_methods: 구성 설정에 대한 메서드를 초기화하여 더 빠르게 액세스할 수 있습니다.

  • set_load_path: 이 초기화기는 bootstrap_hook 전에 실행됩니다. config.paths.load_paths에 지정된 경로를 $LOAD_PATH에 추가합니다. 그리고 config.add_autoload_paths_to_load_pathfalse로 설정하지 않는 한 config.autoload_paths, config.eager_load_paths, config.autoload_once_paths에 지정된 모든 자동 로드 경로도 추가합니다.

  • set_autoload_paths: 이 초기화기는 bootstrap_hook 전에 실행됩니다. app 하위 디렉토리와 config.autoload_paths, config.eager_load_pathsconfig.autoload_once_paths에 지정된 경로를 ActiveSupport::Dependencies.autoload_paths에 추가합니다.

  • add_routing_paths: 기본적으로 모든 config/routes.rb 파일(애플리케이션 및 레일타이, 엔진 포함)을 로드하고 애플리케이션의 경로를 설정합니다.

  • add_locales: config/locales의 파일(애플리케이션, 레일타이, 엔진)을 I18n.load_path에 추가하여 이러한 파일의 번역을 사용할 수 있게 합니다.

  • add_view_paths: 애플리케이션, 레일타이 및 엔진의 app/views 디렉토리를 뷰 파일 조회 경로에 추가합니다.

  • add_mailer_preview_paths: 애플리케이션, 레일타이 및 엔진의 test/mailers/previews 디렉토리를 메일러 미리보기 파일 조회 경로에 추가합니다.

  • load_environment_config: 이 초기화기는 load_environment_hook 전에 실행됩니다. 현재 환경의 config/environments 파일을 로드합니다.

  • prepend_helpers_path: 애플리케이션, 레일타이 및 엔진의 app/helpers 디렉토리를 헬퍼 조회 경로에 추가합니다.

  • load_config_initializers: 애플리케이션, 레일타이 및 엔진의 config/initializers 디렉토리의 모든 Ruby 파일을 로드합니다. 이 디렉토리의 파일은 모든 프레임워크가 로드된 후 적용되어야 하는 구성 설정을 포함할 수 있습니다.

  • engines_blank_point: 엔진이 로드되기 전에 실행할 수 있는 초기화 지점을 제공합니다. 이 지점 이후에 모든 레일타이 및 엔진 초기화기가 실행됩니다.

  • add_generator_templates: 애플리케이션, 레일타이 및 엔진의 lib/templates 디렉토리에서 생성기 템플릿을 찾고 config.generators.templates 설정에 추가하여 모든 생성기에서 참조할 수 있게 합니다.

  • ensure_autoload_once_paths_as_subset: config.autoload_once_pathsconfig.autoload_paths의 하위 집합만 포함하도록 합니다. 그렇지 않으면 예외가 발생합니다.

  • add_to_prepare_blocks: 애플리케이션, 레일타이 또는 엔진의 모든 config.to_prepare 호출 블록은 개발 환경에서는 요청별로, 프로덕션에서는 첫 번째 요청 전에 실행되는 Action Dispatch의 to_prepare 콜백에 추가됩니다.

  • add_builtin_route: 개발 환경에서 실행 중인 경우 rails/info/properties 경로를 애플리케이션 경로에 추가합니다. 이 경로는 기본 Rails 애플리케이션의 public/index.html에 대한 자세한 정보(Rails 및 Ruby 버전 등)를 제공합니다.

  • build_middleware_stack: 요청에 대한 미들웨어 스택을 구축하고 call 메서드가 있는 객체를 반환합니다.

  • eager_load!: config.eager_loadtrue이면 config.before_eager_load 후크를 실행하고 eager_load!를 호출하여 config.eager_load_namespaces를 모두 로드합니다.

  • finisher_hook: 애플리케이션 초기화 프로세스가 완료된 후 실행할 후크를 제공하며, 애플리케이션, 레일타이 및 엔진의 모든 config.after_initialize 블록을 실행합니다.

  • set_routes_reloader_hook: ActiveSupport::Callbacks.to_run을 사용하여 경로 파일을 다시 로드하도록 Action Dispatch를 구성합니다.

  • disable_dependency_loading: config.eager_loadtrue로 설정된 경우 자동 종속성 로드를 비활성화합니다.

데이터베이스 풀링

Active Record 데이터베이스 연결은 ActiveRecord::ConnectionAdapters::ConnectionPool에 의해 관리되며, 이는 스레드 액세스 수를 제한된 수의 데이터베이스 연결으로 동기화합니다. 이 제한은 기본적으로 5이며 database.yml에서 구성할 수 있습니다.

development:
  adapter: sqlite3
  database: storage/development.sqlite3
  pool: 5
  timeout: 5000

기본적으로 Active Record에 의해 처리되는 연결 풀링은 모든 애플리케이션 서버(Thin, Puma, Unicorn 등)에서 동일하게 작동합니다. 데이터베이스 연결 풀은 처음에는 비어 있습니다. 연결 요구가 증가함에 따라 연결 풀 제한에 도달할 때까지 연결을 생성합니다.

요청 중 데이터베이스에 액세스해야 하는 경우 첫 번째로 연결을 체크아웃합니다. 요청이 완료되면 연결을 다시 체크인합니다. 따라서 다음 요청에 사용할 수 있는 추가 연결 슬롯이 다시 사용 가능해집니다.

사용 가능한 연결보다 더 많은 연결을 사용하려고 하면 Active Record가 연결을 얻을 때까지 대기하게 됩니다. 연결을 얻지 못하면 다음과 유사한 시간 초과 오류가 발생합니다.

ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)

위 오류가 발생하면 database.ymlpool 옵션을 늘려 연결 풀 크기를 늘리는 것이 좋습니다.

참고. 다중 스레드 환경에서는 여러 스레드가 동시에 여러 연결에 액세스할 수 있습니다. 따라서 현재 요청 로드에 따라 제한된 수의 연결을 두고 경합이 발생할 수 있습니다.

사용자 정의 구성

config.x 네임스페이스 또는 config 직접 아래에 사용자 정의 구성을 추가할 수 있습니다. 이 두 가지의 차이점은 중첩된 구성은 config.x를 사용해야 하고(config.x.nested.hi), 단일 수준 구성은 config를 사용해야 한다는 것입니다(config.hello).

config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries  = 3
config.super_debugger = true

이러한 구성 지점은 구성 객체를 통해 사용할 수 있습니다:

Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries  # => 3
Rails.configuration.x.payment_processing.not_set  # => nil
Rails.configuration.super_debugger                # => true

Rails::Application.config_for를 사용하여 전체 구성 파일을 로드할 수도 있습니다:

# config/payment.yml
production:
  environment: production
  merchant_id: production_merchant_id
  public_key:  production_public_key
  private_key: production_private_key

development:
  environment: sandbox
  merchant_id: development_merchant_id
  public_key:  development_public_key
  private_key: development_private_key
# config/application.rb
module MyApp
  class Application < Rails::Application
    config.payment = config_for(:payment)
  end
end
Rails.configuration.payment['merchant_id'] # => production_merchant_id or development_merchant_id

Rails::Application.config_for는 공통 구성을 지원하여 일반적인 구성을 그룹화할 수 있습니다. 공통 구성은 환경 구성에 병합됩니다.

# config/example.yml
shared:
  foo:
    bar:
      baz: 1

development:
  foo:
    bar:
      qux: 2
# development 환경
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }

검색 엔진 색인

때때로 애플리케이션의 일부 페이지가 Google, Bing, Yahoo 또는 Duck Duck Go와 같은 검색 사이트에 표시되지 않도록 하고 싶을 수 있습니다. 이러한 사이트의 로봇은 먼저 http://your-site.com/robots.txt 파일을 분석하여 허용된 페이지를 알아냅니다.

Rails는 이 파일을 /public 폴더에 자동으로 생성합니다. 기본적으로 모든 페이지의 색인을 허용합니다. 애플리케이션의 모든 페이지에 대한 색인을 차단하려면 다음을 사용하세요:

User-agent: *
Disallow: /

특정 페이지만 차단하려면 더 복잡한 구문이 필요합니다. 공식 문서에서 자세히 알아보세요.

이벤트 기반 파일 시스템 모니터

listen gem이 로드되면 Rails는 재로드가 활성화된 경우 이벤트 기반 파일 시스템 모니터를 사용하여 변경 사항을 감지합니다:

group :development do
  gem "listen", "~> 3.5"
end

그렇지 않으면 Rails는 애플리케이션 트리를 걸어다니며 변경 사항이 있는지 확인합니다.

Linux와 macOS에는 추가 gem이 필요하지 않지만 BSDWindows에는 일부가 필요합니다.

일부 설정은 지원되지 않습니다.