rubyonrails.org에서 더 보기:

1 초기화 코드의 위치

Rails는 초기화 코드를 넣을 수 있는 네 가지 표준 위치를 제공합니다:

  • config/application.rb
  • 환경별 구성 파일
  • Initializers
  • After-initializers

2 Rails 이전에 코드 실행하기

드물게 애플리케이션이 Rails 자체가 로드되기 전에 일부 코드를 실행해야 하는 경우, config/application.rbrequire "rails/all" 호출 위에 해당 코드를 넣으세요.

3 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는 Ruby 형식으로 schema를 덤프하지만, 설정에서 SQL 형식을 사용하도록 할 수 있습니다.

Rails는 Active Record를 구성하기 위해 해당 설정을 사용합니다.

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

클래스에 직접 구성을 적용해야 하는 경우, 초기화가 완료되기 전에 클래스를 자동 로드하지 않도록 initializer에서 lazy load hook을 사용하세요. 초기화 중의 자동 로딩은 앱이 리로드될 때 안전하게 반복될 수 없기 때문에 문제가 발생할 것입니다.

3.1 Versioned Default Values

config.load_defaults는 대상 버전과 이전의 모든 버전에 대한 기본 설정값을 로드합니다. 예를 들어, config.load_defaults 6.1은 6.1 버전까지의 모든 기본값을 로드합니다.

아래는 각 대상 버전과 연관된 기본값들입니다. 값이 충돌하는 경우, 새로운 버전이 이전 버전보다 우선합니다.

3.1.1 대상 버전 8.1의 기본값

3.1.2 대상 버전 8.0의 기본값

3.1.3 대상 버전 7.2의 기본값

3.1.4 대상 버전 7.1의 기본값

3.1.5 Target Version 7.0의 기본값

3.1.6 Target Version 6.1의 기본값

3.1.7 Target Version 6.0의 기본값

3.1.8 Target Version 5.2의 기본값

3.1.9 5.1 버전의 기본값

3.1.10 5.0 버전의 기본값

3.2 Rails 일반 설정

다음 설정 메서드들은 Rails::Engine이나 Rails::Application의 하위 클래스와 같은 Rails::Railtie 객체에서 호출되어야 합니다.

3.2.1 config.add_autoload_paths_to_load_path

autoload paths를 $LOAD_PATH에 추가해야 하는지 여부를 지정합니다. :zeitwerk 모드에서는 config/application.rb에서 일찍 false로 설정하는 것이 권장됩니다. Zeitwerk는 내부적으로 절대 경로를 사용하며, :zeitwerk 모드에서 실행되는 애플리케이션은 require_dependency가 필요하지 않으므로 모델, 컨트롤러, 잡 등이 $LOAD_PATH에 있을 필요가 없습니다. 이를 false로 설정하면 Ruby가 상대 경로로 require 호출을 해결할 때 이러한 디렉토리를 확인하지 않아도 되며, Bootsnap이 이들의 인덱스를 작성할 필요가 없어 작업량과 RAM을 절약할 수 있습니다.

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

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

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

3.2.2 config.after_initialize

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

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

초기화 이후에 sanitized_allowed_tags에서 "div" 태그를 삭제할 수 있습니다.

3.2.3 config.after_routes_loaded

Rails가 application routes 로딩을 완료한 후에 실행될 block을 지정합니다. 이 block은 routes가 다시 로드될 때마다 실행됩니다.

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

3.2.4 config.allow_concurrency

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

3.2.5 config.asset_host

asset들의 host를 설정합니다. CDN을 사용하여 asset을 호스팅하거나, 다른 도메인 별칭을 사용하여 브라우저에 내장된 동시성 제약을 해결하고자 할 때 유용합니다. config.action_controller.asset_host의 단축 버전입니다.

3.2.6 config.assume_ssl

모든 요청이 SSL을 통해 도착한다고 애플리케이션이 가정하도록 합니다. SSL을 종료하는 로드 밸런서를 통해 프록시할 때 유용합니다. 포워딩된 요청은 애플리케이션에 HTTPS 대신 HTTP로 나타납니다. 이로 인해 리다이렉트와 쿠키 보안이 HTTPS 대신 HTTP를 대상으로 하게 됩니다. 이 middleware는 프록시가 이미 SSL을 종료했고 실제로 요청이 HTTPS라고 서버가 가정하도록 합니다.

3.2.7 config.autoflush_log

로그 파일 출력을 버퍼링하지 않고 즉시 쓰기를 활성화합니다. 기본값은 true입니다.

3.2.8 config.autoload_lib(ignore:)

이 메서드는 libconfig.autoload_pathsconfig.eager_load_paths에 추가합니다.

일반적으로 lib 디렉토리에는 autoload나 eager load되지 않아야 하는 하위 디렉토리들이 있습니다. lib를 기준으로 한 상대 경로를 필수 ignore 키워드 인자로 전달해 주세요. 예를 들어,

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

lib/ 디렉터리를 Project Structure에 추가하지만, 자주 사용되는 몇 가지 예외사항들을 제외합니다. lib/assets, lib/tasks, 그리고 lib/generators는 포함되지 않습니다.

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

3.2.9 config.autoload_lib_once(ignore:)

config.autoload_lib_once 메서드는 config.autoload_lib와 비슷하지만, libconfig.autoload_once_paths에 추가한다는 점이 다릅니다.

config.autoload_lib_once를 호출하면 lib의 클래스와 모듈을 애플리케이션 initializer에서도 autoload할 수 있지만, reload되지는 않습니다.

3.2.10 config.autoload_once_paths

Rails가 request마다 초기화되지 않는 상수들을 autoload할 경로들의 배열을 받습니다. reloading이 활성화된 경우에 관련이 있으며, development 환경에서는 기본적으로 활성화되어 있습니다. 그렇지 않으면 모든 autoloading은 한 번만 발생합니다. 이 배열의 모든 요소는 autoload_paths에도 있어야 합니다. 기본값은 빈 배열입니다.

3.2.11 config.autoload_paths

Rails가 상수를 autoload할 경로들의 배열을 받습니다. 기본값은 빈 배열입니다. Rails 6 이후로는 이를 조정하는 것을 권장하지 않습니다. Autoloading and Reloading Constants를 참조하세요.

3.2.12 config.beginning_of_week

애플리케이션의 기본 주 시작일을 설정합니다. 심볼로 된 유효한 요일을 받습니다(예: :monday).

3.2.13 config.cache_classes

!config.enable_reloading와 동등한 이전 설정입니다. 하위 호환성을 위해 지원됩니다.

3.2.14 config.cache_store

Rails 캐싱에 사용할 캐시 스토어를 설정합니다. 옵션으로 :memory_store, :file_store, :mem_cache_store, :null_store, :redis_cache_store 심볼 중 하나 또는 캐시 API를 구현하는 객체를 사용할 수 있습니다. 기본값은 :file_store입니다. 스토어별 설정 옵션은 Cache Stores를 참조하세요.

3.2.15 config.colorize_logging

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

3.2.16 config.consider_all_requests_local

플래그입니다. true로 설정하면 모든 에러에 대해 상세한 디버깅 정보가 HTTP 응답에 출력되며, Rails::Info 컨트롤러가 /rails/info/properties에서 애플리케이션 런타임 컨텍스트를 보여줍니다. development와 test 환경에서는 기본값이 true이고 production 환경에서는 false입니다. 더 세밀한 제어를 위해서는 이를 false로 설정하고 컨트롤러에서 show_detailed_exceptions?를 구현하여 어떤 요청에서 에러에 대한 디버깅 정보를 제공할지 지정할 수 있습니다.

3.2.17 config.console

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

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

3.2.18 config.content_security_policy_nonce_directives

보안 가이드의 Nonce 추가하기를 참조하세요

3.2.19 config.content_security_policy_nonce_generator

보안 가이드의 Nonce 추가하기를 참조하세요

3.2.20 config.content_security_policy_report_only

보안 가이드의 위반 보고하기를 참조하세요

3.2.21 config.credentials.content_path

암호화된 credential 파일의 경로입니다.

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

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

3.2.22 config.credentials.key_path

암호화된 credential 키 파일의 경로입니다.

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

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

3.2.23 config.debug_exception_response_format

개발 환경에서 오류가 발생했을 때 응답에 사용되는 포맷을 설정합니다. API 전용 앱의 경우 기본값은 :api이고 일반 앱의 경우 :default입니다.

3.2.24 config.disable_sandbox

sandbox 모드에서 콘솔을 시작할 수 있는지 여부를 제어합니다. 이는 데이터베이스 서버의 메모리 부족을 초래할 수 있는 오랫동안 실행되는 sandbox 콘솔 세션을 방지하는데 도움이 됩니다. 기본값은 false입니다.

3.2.25 config.dom_testing_default_html_version

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

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

Starting with version The default value is

| (원본) | :html4 | | 7.1 | :html5 (NOTE 참조) |

Nokogiri의 HTML5 파서는 JRuby에서 지원되지 않으므로, JRuby 플랫폼에서 Rails는 :html4로 폴백됩니다.

3.2.26 config.eager_load

true로 설정하면, 등록된 모든 config.eager_load_namespaces를 eager load합니다. 여기에는 애플리케이션, 엔진, Rails 프레임워크 및 다른 모든 등록된 네임스페이스가 포함됩니다.

3.2.27 config.eager_load_namespaces

config.eager_loadtrue로 설정되었을 때 eager load되는 네임스페이스를 등록합니다. 목록의 모든 네임스페이스는 eager_load! 메서드에 응답해야 합니다.

3.2.28 config.eager_load_paths

config.eager_load가 true일 때 Rails가 부팅 시 eager load할 경로들의 배열을 받습니다. 기본값은 애플리케이션의 app 디렉토리 내의 모든 폴더입니다.

3.2.29 config.enable_reloading

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

config.reloading_enabled? 프레디킷도 정의되어 있습니다.

3.2.30 config.encoding

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

3.2.31 config.exceptions_app

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

예외 애플리케이션은 클라이언트가 잘못된 Accept 또는 Content-Type 헤더를 보낼 때 발생하는 ActionDispatch::Http::MimeNegotiation::InvalidType 에러를 처리해야 합니다. 기본 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)

    # 유효하지 않은 mime type인 경우 HTML 포맷으로 fallback
    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

3.2.32 config.file_watcher

config.reload_classes_only_on_changetrue일 때 파일 시스템의 파일 업데이트를 감지하는 데 사용되는 클래스입니다. Rails는 기본값인 ActiveSupport::FileUpdateCheckerActiveSupport::EventedFileUpdateChecker를 제공합니다. 커스텀 클래스는 ActiveSupport::FileUpdateChecker API를 준수해야 합니다.

ActiveSupport::EventedFileUpdateChecker를 사용하려면 listen gem이 필요합니다:

group :development do
  gem "listen", "~> 3.5"
end

Linux와 macOS에서는 추가 gem이 필요하지 않지만, *BSDWindows에서는 일부 gem이 필요합니다.

일부 설정은 지원되지 않는다는 점에 유의하세요.

3.2.33 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, :cvv, :cvc
]

Parameters filter는 정규표현식의 부분 매칭으로 작동합니다.

3.2.34 config.filter_redirect

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

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

redirect 필터는 url이 문자열을 포함하거나 정규식과 일치하는지 테스트하여 동작합니다.

3.2.35 config.force_ssl

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

3.2.36 config.helpers_paths

view helper를 로드할 추가 경로들의 배열을 정의합니다.

3.2.37 config.host_authorization

HostAuthorization middleware를 구성하기 위한 옵션 해시를 받습니다.

3.2.38 config.hosts

Host 헤더를 검증하는 데 사용되는 문자열, 정규식, 또는 IPAddr의 배열입니다. DNS rebinding 공격을 방지하는 데 도움이 되는 HostAuthorization middleware에서 사용됩니다.

3.2.39 config.javascript_path

앱의 JavaScript가 위치한 경로를 app 디렉토리를 기준으로 설정하며 기본값은 javascript입니다. 앱에서 구성된 javascript_pathautoload_paths에서 제외됩니다.

3.2.40 config.log_file_size

Rails 로그 파일의 최대 크기를 바이트 단위로 정의합니다. development와 test 환경에서는 104_857_600 (100 MiB)가 기본값이며, 다른 모든 환경에서는 무제한입니다.

3.2.41 config.log_formatter

Rails 로거의 포매터를 정의합니다. 이 옵션은 모든 환경에서 기본적으로 ActiveSupport::Logger::SimpleFormatter의 인스턴스로 설정됩니다. config.logger에 값을 설정하는 경우, 로거가 ActiveSupport::TaggedLogging 인스턴스로 래핑되기 전에 포매터 값을 수동으로 로거에 전달해야 합니다. Rails는 이를 자동으로 처리하지 않습니다.

3.2.42 config.log_level

Rails 로거의 상세 수준을 정의합니다. 이 옵션은 production을 제외한 모든 환경에서 기본적으로 :debug로 설정되며, production에서는 :info가 기본값입니다. 사용 가능한 로그 레벨은 :debug, :info, :warn, :error, :fatal, :unknown입니다.

3.2.43 config.log_tags

request 객체가 응답하는 메서드 목록, request 객체를 받는 Proc, 또는 to_s에 응답하는 것을 받습니다. 이를 통해 서브도메인이나 요청 ID와 같은 디버그 정보로 로그 라인에 태그를 지정할 수 있으며, 이는 다중 사용자 production 애플리케이션을 디버깅하는 데 매우 유용합니다.

3.2.44 config.logger

Rails.loggerActiveRecord::Base.logger와 같은 관련 Rails 로깅에 사용될 로거입니다. 기본적으로 log/ 디렉토리에 로그를 출력하는 ActiveSupport::Logger 인스턴스를 래핑하는 ActiveSupport::TaggedLogging 인스턴스입니다. 사용자 정의 로거를 제공할 수 있으며, 완전한 호환성을 위해서는 다음 지침을 따라야 합니다:

  • 포매터를 지원하려면 config.log_formatter 값에서 로거에 수동으로 포매터를 할당해야 합니다.

  • 태그된 로그를 지원하기 위해서는 로그 인스턴스가 ActiveSupport::TaggedLogging으로 감싸져야 합니다.

  • silence를 지원하기 위해서는 logger가 ActiveSupport::LoggerSilence module을 include해야 합니다. ActiveSupport::Logger 클래스는 이미 이러한 모듈들을 포함하고 있습니다.

class MyLogger < ::Logger
  include ActiveSupport::LoggerSilence
end

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

필요한 경우에는, 기존 logger를 상속하고 ActiveSupport::LoggerSilence를 포함하여 커스텀 logger를 생성할 수 있습니다.

3.2.45 config.middleware

애플리케이션의 middleware를 설정할 수 있습니다. 이것은 아래의 Configuring Middleware 섹션에서 자세히 다룹니다.

3.2.46 config.precompile_filter_parameters

true일 경우, ActiveSupport::ParameterFilter.precompile_filters를 사용하여 config.filter_parameters를 미리 컴파일합니다.

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

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

3.2.47 config.public_file_server.enabled

Rails가 public 디렉토리에서 정적 파일을 제공해야 하는지 설정합니다. 기본값은 true입니다.

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

3.2.48 config.railties_order

Railties/Engines가 로드되는 순서를 수동으로 지정할 수 있습니다. 기본값은 [:all]입니다.

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

3.2.49 config.rake_eager_load

true로 설정하면, Rake 태스크를 실행할 때 애플리케이션을 eager load합니다. 기본값은 false입니다.

3.2.50 config.relative_url_root

Rails에게 하위 디렉토리에 배포한다는 것을 알려주기 위해 사용할 수 있습니다. 기본값은 ENV['RAILS_RELATIVE_URL_ROOT']입니다.

3.2.51 config.reload_classes_only_on_change

추적된 파일이 변경될 때만 클래스를 리로딩하는 기능을 활성화하거나 비활성화합니다. 기본적으로 autoload paths의 모든 것을 추적하며 true로 설정되어 있습니다. config.enable_reloadingfalse인 경우, 이 옵션은 무시됩니다.

3.2.52 config.require_master_key

ENV["RAILS_MASTER_KEY"] 또는 config/master.key 파일을 통해 master key가 제공되지 않은 경우 앱이 부팅되지 않도록 합니다.

3.2.53 config.sandbox_by_default

true일 때, rails console이 sandbox 모드로 시작됩니다. sandbox 모드가 아닌 상태로 rails console을 시작하려면 --no-sandbox를 지정해야 합니다. 이는 프로덕션 데이터베이스에 실수로 쓰기 작업을 하는 것을 방지하는 데 도움이 됩니다. 기본값은 false입니다.

3.2.54 config.secret_key_base

애플리케이션의 key generator를 위한 입력 secret을 지정하는 대체 수단입니다. 이 값을 설정하지 않고 대신 config/credentials.yml.encsecret_key_base를 지정하는 것이 권장됩니다. 더 자세한 정보와 대체 설정 방법은 secret_key_base API 문서를 참조하세요.

3.2.55 config.server_timing

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

3.2.56 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"} 

3.2.57 config.session_store

세션을 저장하는 데 사용할 클래스를 지정합니다. 가능한 값은 :cache_store, :cookie_store, :mem_cache_store, 커스텀 store, 또는 :disabled입니다. :disabled는 Rails에게 세션을 처리하지 않도록 지시합니다.

이 설정은 setter 대신 일반 메서드 호출을 통해 구성됩니다. 이를 통해 추가 옵션을 전달할 수 있습니다:

config.session_store :cookie_store, key: "_your_app_session" 

만약 커스텀 store가 심볼로 지정되면, ActionDispatch::Session 네임스페이스로 해석됩니다.

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

The default store는 애플리케이션 이름을 session key로 사용하는 cookie store입니다.

3.2.58 config.silence_healthcheck_path

로그에서 무시되어야 하는 health check의 경로를 지정합니다. 무시 기능을 구현하기 위해 Rails::Rack::SilenceRequest를 사용합니다. 특히 초기 단계의 애플리케이션에서 health check가 production 로그를 채우는 것을 방지하기 위한 것입니다.

config.silence_healthcheck_path = "/up" 경로로 들어오는 HTTP 요청에 대해서는 로그를 출력하지 않습니다.

3.2.59 config.ssl_options

ActionDispatch::SSL middleware의 설정 옵션입니다.

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

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

3.2.60 config.time_zone

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

3.2.61 config.x

애플리케이션 config 객체에 중첩된 커스텀 설정을 쉽게 추가하는데 사용됩니다.

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

Custom Configuration을 참조하세요.

3.2.62 config.yjit

Ruby 3.3부터 성능을 크게 향상시키기 위해 YJIT를 활성화합니다. 메모리가 제한된 환경에 배포하는 경우 이를 false로 설정하고 싶을 수 있습니다.

시작 버전 기본값
(original) false
7.2 true
8.1 !Rails.env.local?

3.3 Assets를 설정하기

3.3.1 config.assets.css_compressor

CSS 압축기를 정의합니다. 기본적으로 sass-rails로 설정됩니다. 현재 유일한 대안 값은 yui-compressor gem을 사용하는 :yui입니다.

3.3.2 config.assets.js_compressor

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

3.3.3 config.assets.gzip

압축되지 않은 assets와 함께 gzip으로 압축된 버전의 컴파일된 assets 생성을 활성화하는 플래그입니다. 기본값은 true입니다.

3.3.4 config.assets.paths

assets를 찾을 때 사용되는 경로를 포함합니다. 이 설정 옵션에 경로를 추가하면 해당 경로들이 assets 검색에 사용됩니다.

3.3.5 config.assets.precompile

bin/rails assets:precompile이 실행될 때 사전 컴파일될 추가 assets(application.cssapplication.js 외)를 지정할 수 있습니다.

3.3.6 config.assets.unknown_asset_fallback

sprockets-rails 3.2.0 이상을 사용하는 경우, asset이 pipeline에 없을 때 asset pipeline의 동작을 수정할 수 있습니다.

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

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

3.3.7 config.assets.prefix

assets가 제공되는 prefix를 정의합니다. 기본값은 /assets입니다.

3.3.8 config.assets.manifest

asset 사전 컴파일러의 manifest 파일에 사용될 전체 경로를 정의합니다. 기본값은 public 폴더 내 config.assets.prefix 디렉토리에 있는 manifest-<random>.json 파일입니다.

3.3.9 config.assets.digest

asset 이름에 SHA256 지문 사용을 활성화합니다. 기본값은 true입니다.

3.3.10 config.assets.debug

assets의 연결과 압축을 비활성화합니다. development.rb에서 기본값은 true입니다.

3.3.11 config.assets.version

3.3.12 config.assets.digest_algorithm

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

3.3.13 config.assets.compile

production 환경에서 실시간 Sprockets 컴파일을 켤 수 있는 boolean 값입니다.

3.3.14 config.assets.logger

Log4r 또는 기본 Ruby Logger 클래스의 인터페이스를 따르는 logger를 허용합니다. 기본값은 config.logger에 설정된 것과 동일합니다. config.assets.loggerfalse로 설정하면 제공되는 asset 로깅이 꺼집니다.

3.3.15 config.assets.quiet

asset 요청의 로깅을 비활성화합니다. config/environments/development.rb에서 기본적으로 true로 설정됩니다.

3.4 Generators 설정하기

Rails는 config.generators 메소드를 사용해서 어떤 generator가 사용될지 변경할 수 있습니다. 이 메소드는 block을 받습니다:

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

generators를 구성할 때 블록을 사용할 수 있습니다. generators는 Rails에서 다양한 컴포넌트를 생성하는 데 사용됩니다. 위 예시에서는 ORM과 테스트 프레임워크를 지정하고 있습니다.

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

  • force_plural은 모델 이름의 복수형을 허용합니다. 기본값은 false입니다.
  • helper는 helper를 생성할지 여부를 정의합니다. 기본값은 true입니다.
  • integration_tool은 integration test를 생성하는 데 사용할 integration tool을 정의합니다. 기본값은 :test_unit입니다.
  • system_tests는 system test를 생성하는 데 사용할 integration tool을 정의합니다. 기본값은 :test_unit입니다.
  • orm은 사용할 orm을 정의합니다. 기본값은 false이며 기본적으로 Active Record를 사용합니다.
  • resource_controllerbin/rails generate resource 사용 시 controller를 생성하는 데 사용할 generator를 정의합니다. 기본값은 :controller입니다.
  • resource_route는 resource route 정의를 생성할지 여부를 정의합니다. 기본값은 true입니다.
  • scaffold_controllerresource_controller와 다르며, bin/rails generate scaffold 사용 시 scaffolded controller를 생성하는 데 사용할 generator를 정의합니다. 기본값은 :scaffold_controller입니다.
  • test_framework는 사용할 test framework를 정의합니다. 기본값은 false이며 기본적으로 minitest를 사용합니다.
  • template_engine은 ERB나 Haml과 같은 사용할 template engine을 정의합니다. 기본값은 :erb입니다.
  • apply_rubocop_autocorrect_after_generate!는 Rails generator 실행 후 RuboCop의 autocorrect 기능을 적용합니다.

3.5 Middleware 설정하기

모든 Rails 애플리케이션은 개발 환경에서 다음 순서로 사용되는 표준 middleware 세트와 함께 제공됩니다:

3.5.1 ActionDispatch::HostAuthorization

DNS rebinding과 다른 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 헤더 검사가 수행되지 않습니다. production 환경에서 헤더 공격을 방지하고 싶다면, 아래와 같이 수동으로 허용할 host를 지정해야 합니다:

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

Request의 host는 case 연산자(#===)를 사용하여 hosts 항목과 대조됩니다. 이를 통해 hostsRegexp, Proc, IPAddr 등의 타입을 지원할 수 있습니다. 다음은 정규표현식을 사용한 예시입니다.

# `www.product.com`와 `beta1.product.com` 같은 서브도메인으로부터의 
# 요청을 허용합니다.
Rails.application.config.hosts << /.*\.product\.com/

제공된 regexp는 양쪽 끝에 앵커(\A\z)가 감싸지므로 전체 hostname과 일치해야 합니다. 예를 들어 /product.com/은 앵커가 추가되면 www.product.com과 매치되지 않습니다.

모든 sub-domain을 허용할 수 있는 특별한 케이스가 지원됩니다:

# `www.product.com`과 `beta1.product.com` 같은 서브도메인에서의 
# 요청을 허용합니다.
Rails.application.config.hosts << ".product.com"

Host Authorization 체크에서 특정 요청을 제외하고 싶다면 config.host_authorization.exclude를 설정하면 됩니다:

# /healthcheck/ 경로에 대한 요청을 host 검사에서 제외
Rails.application.config.host_authorization = {
  exclude: ->(request) { request.path.include?("healthcheck") }
}

승인되지 않은 host로 요청이 올 경우, 기본 Rack application이 실행되어 403 Forbidden으로 응답합니다. 이는 config.host_authorization.response_app을 설정하여 커스터마이즈할 수 있습니다. 예를 들어:

Rails.application.config.host_authorization = {
  response_app: -> env do
    [400, { "Content-Type" => "text/plain" }, ["잘못된 요청"]]
  end
}

3.5.2 ActionDispatch::ServerTiming

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

3.5.3 ActionDispatch::SSL

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

3.5.4 ActionDispatch::Static

정적 자산을 제공하는 데 사용됩니다. config.public_file_server.enabledfalse인 경우 비활성화됩니다. index가 아닌 이름의 정적 디렉토리 인덱스 파일을 제공해야 하는 경우 config.public_file_server.index_name을 설정하세요. 예를 들어, 디렉토리 요청에 대해 index.html 대신 main.html을 제공하려면 config.public_file_server.index_name"main"으로 설정하세요.

3.5.5 ActionDispatch::Executor

스레드 안전 코드 리로딩을 허용합니다. config.allow_concurrencyfalse인 경우 비활성화되며, 이로 인해 Rack::Lock이 로드됩니다. Rack::Lock은 앱을 뮤텍스로 감싸서 한 번에 하나의 스레드만 호출할 수 있도록 합니다.

3.5.6 ActiveSupport::Cache::Strategy::LocalCache

기본적인 메모리 기반 캐시 역할을 합니다. 이 캐시는 스레드 안전하지 않으며 단일 스레드를 위한 임시 메모리 캐시로만 사용됩니다.

3.5.7 Rack::Runtime

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

3.5.8 Rails::Rack::Logger

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

3.5.9 ActionDispatch::ShowExceptions

애플리케이션에서 반환된 모든 예외를 구조하고, 요청이 로컬이거나 config.consider_all_requests_localtrue로 설정된 경우 보기 좋은 예외 페이지를 렌더링합니다. config.action_dispatch.show_exceptions:none으로 설정된 경우 예외가 발생합니다.

3.5.10 ActionDispatch::RequestId

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

3.5.11 ActionDispatch::RemoteIp

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

3.5.12 Rack::Sendfile

파일에서 제공되는 본문을 가진 응답을 가로채고 서버별 X-Sendfile 헤더로 대체합니다. config.action_dispatch.x_sendfile_header로 구성 가능합니다.

3.5.13 ActionDispatch::Callbacks

요청을 처리하기 전에 prepare 콜백들을 실행합니다.

3.5.14 ActionDispatch::Cookies

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

3.5.15 ActionDispatch::Session::CookieStore

세션을 쿠키에 저장하는 역할을 합니다. config.session_store를 변경하여 다른 middleware를 사용할 수 있습니다.

3.5.16 ActionDispatch::Flash

flash 키들을 설정합니다. config.session_store가 값으로 설정되어 있을 때만 사용 가능합니다.

3.5.17 Rack::MethodOverride

params[:_method]가 설정되어 있으면 메소드를 오버라이드할 수 있게 합니다. 이 middleware는 PATCH, PUT, DELETE HTTP 메소드 타입들을 지원합니다.

3.5.18 Rack::Head

모든 HEAD 요청에 대해 빈 body를 반환합니다. 다른 모든 요청은 변경하지 않고 그대로 둡니다.

3.5.19 Adding Custom Middleware

이러한 일반적인 middleware 외에도 config.middleware.use 메소드를 사용하여 자신만의 middleware를 추가할 수 있습니다:

config.middleware.use Magical::Unicorns

middleware를 등록하려면 이렇게 하면 됩니다.

이는 미들웨어 스택의 끝에 Magical::Unicorns 미들웨어를 추가할 것입니다. 다른 미들웨어 앞에 추가하고 싶다면 insert_before를 사용할 수 있습니다.

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

middleware stack에서 특정한 미들웨어 앞에 다른 미들웨어를 추가할 수 있습니다.

인덱스를 사용하여 원하는 위치에 middleware를 삽입할 수도 있습니다. 예를 들어, Magical::Unicorns middleware를 스택의 최상단에 삽입하고 싶다면 다음과 같이 할 수 있습니다:

config.middleware.insert_before 0, Magical::Unicorns

middleware 스택의 가장 앞에 새로운 middleware를 추가합니다.

또한 insert_after는 다른 middleware 뒤에 middleware를 삽입할 수 있습니다:

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

Rack::Head 다음에 middleware를 추가합니다.

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

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

middleware 중에 ActionController::Failsafe를 Lifo::Failsafe로 교체합니다.

Middleware는 다른 위치로 이동될 수 있습니다:

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

이는 Magical::Unicorns middleware를 ActionDispatch::Flash 앞으로 이동시킵니다. 뒤로도 이동시킬 수 있습니다:

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

ActionDispatch::Flash 다음으로 Magical::Unicorns를 이동합니다.

또한 아예 stack에서 제거될 수 있습니다:

config.middleware.delete Rack::MethodOverride

Rack::MethodOverride middleware를 제거합니다. 즉, _method parameter 기반의 HTTP method spoofing이 더 이상 작동하지 않게 됩니다.

3.6 i18n 설정하기

이러한 모든 설정 옵션들은 I18n 라이브러리에 위임됩니다.

3.6.1 config.i18n.available_locales

앱에서 허용되는 사용 가능한 locale들을 정의합니다. 기본값은 locale 파일에서 찾은 모든 locale 키이며, 새로운 애플리케이션에서는 보통 :en만 있습니다.

3.6.2 config.i18n.default_locale

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

3.6.3 config.i18n.enforce_available_locales

i18n을 통과하는 모든 locale이 available_locales 목록에 선언되어 있어야 함을 보장하며, 사용할 수 없는 locale을 설정할 때 I18n::InvalidLocale 예외를 발생시킵니다. 기본값은 true입니다. 이는 사용자 입력으로부터 유효하지 않은 locale 설정을 방지하는 보안 조치로 작동하므로, 특별히 필요한 경우가 아니라면 이 옵션을 비활성화하지 않는 것이 좋습니다.

3.6.4 config.i18n.load_path

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

3.6.5 config.i18n.raise_on_missing_translations

누락된 번역에 대해 오류를 발생시킬지 여부를 결정합니다. true인 경우, 뷰와 컨트롤러에서 I18n::MissingTranslationData를 발생시킵니다. :strict인 경우, 모델에서도 오류를 발생시킵니다. 기본값은 false입니다.

3.6.6 config.i18n.fallbacks

누락된 번역에 대한 대체(fallback) 동작을 설정합니다. 이 옵션의 사용 예시는 다음 3가지가 있습니다:

  • 기본 locale을 대체로 사용하기 위해 옵션을 true로 설정할 수 있습니다:

    config.i18n.fallbacks = true
    
  • 또는 대체로 사용할 locale 배열을 설정할 수 있습니다:

    config.i18n.fallbacks = [:tr, :en]
    
  • 또는 각 locale에 대해 서로 다른 대체를 개별적으로 설정할 수 있습니다. 예를 들어, :az:da에 대해 각각 :tr:de, :en을 대체로 사용하고 싶다면 다음과 같이 할 수 있습니다:

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

3.7 Active Model 설정하기

3.7.1 config.active_model.i18n_customize_full_message

[Error#full_message][ActiveModel::Error#full_message] 형식을 i18n locale 파일에서 재정의할 수 있는지를 제어합니다. 기본값은 false입니다.

true로 설정하면, full_message는 locale 파일의 attribute와 model 레벨에서 형식을 찾습니다. 기본 형식은 "%{attribute} %{message}"이며, 여기서 attribute는 속성의 이름이고 message는 유효성 검사 관련 메시지입니다. 다음 예제는 모든 Person 속성의 형식과 특정 Person 속성(age)의 형식을 재정의합니다.

class Person
  include ActiveModel::Validations

  attr_accessor :name, :age

  validates :name, :age, presence: true
end
en:
  activemodel: # 또는 activerecord:
    errors:
      models:
        person:
          # Person의 모든 속성에 대한 형식을 재정의:
          format: "유효하지 않은 %{attribute} (%{message})"
          attributes:
            age:
              # age 속성의 형식을 재정의:
              format: "%{message}"
              blank: "%{attribute}를 입력해주세요"
irb> person = Person.new.tap(&:valid?)

irb> person.errors.full_messages
=> [
  "유효하지 않은 이름 (비어 있을 수 없습니다)",
  "나이를 입력해주세요"
]

irb> person.errors.messages
=> {
  :name => ["비어 있을 수 없습니다"],
  :age  => ["나이를 입력해주세요"]
}

이 메소드를 사용하여 지정된 attribute/value 쌍에 대한 전체 메시지 에러를 생성할 수 있습니다. full_message 메소드는 full_message 메시지를 생성하기 위해 필요한 모든 부분을 조합하여 사용합니다.

반환 값: 모든 부분이 조합된 메시지를 포함한 문자열

person = Person.new
person.errors.add(:name, :blank)
person.errors.full_message(:name, "can't be blank")
# => "Name can't be blank"

I18n lookups를 활용하여 메시지를 찾을 수도 있습니다:

I18n.backend.store_translations(:en, errors: {
  full_messages: {
    format: "%{message}"
  }
})

person = Person.new
person.errors.add(:name, :blank)
person.errors.full_message(:name, "can't be blank")
# => "can't be blank"

3.8 Active Record 설정하기

config.active_record는 다양한 설정 옵션들을 포함합니다:

3.8.1 config.active_record.logger

Log4r 또는 기본 Ruby Logger 클래스의 인터페이스를 준수하는 logger를 받아들이며, 이는 새로 생성되는 모든 데이터베이스 연결에 전달됩니다. Active Record 모델 클래스나 Active Record 모델 인스턴스에서 logger를 호출하여 이 logger를 조회할 수 있습니다. 로깅을 비활성화하려면 nil로 설정하세요.

3.8.2 config.active_record.primary_key_prefix_type

primary key 컬럼의 명명 방식을 조정할 수 있습니다. 기본적으로 Rails는 primary key 컬럼이 id로 명명된다고 가정합니다(이 설정 옵션을 지정할 필요가 없습니다). 다음 두 가지 다른 옵션이 있습니다:

  • :table_name은 Customer 클래스의 primary key를 customerid로 만듭니다.
  • :table_name_with_underscore는 Customer 클래스의 primary key를 customer_id로 만듭니다.

3.8.3 config.active_record.table_name_prefix

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

3.8.4 config.active_record.table_name_suffix

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

3.8.5 config.active_record.schema_migrations_table_name

스키마 마이그레이션 테이블의 이름으로 사용될 문자열을 설정할 수 있습니다.

3.8.6 config.active_record.internal_metadata_table_name

내부 메타데이터 테이블의 이름으로 사용될 문자열을 설정할 수 있습니다.

3.8.7 config.active_record.protected_environments

파괴적인 액션이 금지되어야 하는 환경 이름들의 배열을 설정할 수 있습니다.

3.8.8 config.active_record.pluralize_table_names

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

3.8.9 config.active_record.default_timezone

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

3.8.10 config.active_record.schema_format

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

3.8.11 config.active_record.error_on_ignored_order

배치 쿼리 중에 쿼리의 순서가 무시될 때 에러를 발생시켜야 하는지 지정합니다. 옵션은 true(에러 발생) 또는 false(경고)입니다. 기본값은 false입니다.

3.8.12 config.active_record.timestamped_migrations

migration이 연속된 정수로 번호가 매겨질지 또는 timestamp로 번호가 매겨질지를 제어합니다. 기본값은 true이며, timestamp를 사용하는 것이 선호됩니다. 특히 여러 개발자가 동일한 애플리케이션에서 작업하는 경우에 더욱 그렇습니다.

3.8.13 config.active_record.automatically_invert_plural_associations

Active Record가 복수형으로 된 이름의 inverse relation을 자동으로 찾을지 여부를 제어합니다.

예시:

class Post < ApplicationRecord
  has_many :comments
end

class Comment < ApplicationRecord
  belongs_to :post
end

위의 경우 Active Record는 Post에서 단수형인 :comment 연관만을 찾았고, 찾을 수 없었습니다.

이 옵션을 활성화하면 :comments 연관도 함께 찾게 됩니다. 대부분의 경우 역방향 연관 관계를 찾는 것은 불필요한 쿼리를 방지할 수 있어 유용하지만, 이를 예상하지 않는 레거시 코드와의 하위 호환성 문제를 일으킬 수 있습니다.

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

class Comment < ApplicationRecord
  self.automatically_invert_plural_associations = false

  belongs_to :post
end

그리고 association 별로 설정할 수 있습니다:

class Comment < ApplicationRecord
  self.automatically_invert_plural_associations = true

  # inverse_of: nil을 사용하여 자동 inverse 추론을 비활성화합니다
  belongs_to :post, inverse_of: nil
end
시작 버전 기본값
(original) false

3.8.14 config.active_record.validate_migration_timestamps

migration timestamp를 검증할지 여부를 제어합니다. 설정되면, migration 파일의 timestamp prefix가 현재 시간과 관련된 timestamp보다 하루 이상 앞서 있을 경우 에러가 발생합니다. 이는 migration 파일의 날짜를 미래로 설정하는 것을 방지하기 위한 것으로, migration 생성 및 다른 migration 명령에 영향을 줄 수 있습니다. config.active_record.timestamped_migrationstrue로 설정되어 있어야 합니다.

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

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

3.8.15 config.active_record.db_warnings_action

SQL 쿼리가 경고를 생성할 때 취할 동작을 제어합니다. 다음 옵션들을 사용할 수 있습니다:

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

  • :log - 데이터베이스 경고를 :warn 레벨로 ActiveRecord.logger를 통해 로깅합니다.

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

  • :report - 데이터베이스 경고를 Rails의 에러 리포터 구독자들에게 보고합니다.

  • Custom proc - 사용자 정의 proc을 제공할 수 있습니다. 이는 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
    

3.8.16 config.active_record.db_warnings_ignore

구성된 db_warnings_action에 관계없이 무시될 경고 코드와 메시지의 허용 목록을 지정합니다. 기본 동작은 모든 경고를 보고하는 것입니다. 무시할 경고는 문자열이나 정규표현식으로 지정할 수 있습니다. 예시:

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

3.8.17 config.active_record.migration_strategy

migration에서 schema statement 메소드를 수행하는데 사용되는 strategy 클래스를 제어합니다. 기본 클래스는 connection adapter에 위임합니다. 커스텀 strategy는 ActiveRecord::Migration::ExecutionStrategy를 상속받아야 하거나, 구현되지 않은 메소드에 대해 기본 동작을 유지하기 위해 DefaultStrategy를 상속받을 수 있습니다.

class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
  def drop_table(*)
    raise "테이블 삭제는 지원되지 않습니다!"
  end
end

config.active_record.migration_strategy = CustomMigrationStrategy

3.8.18 config.active_record.lock_optimistically

Active Record가 optimistic locking을 사용할지 여부를 제어하며 기본값은 true입니다.

3.8.19 config.active_record.cache_timestamp_format

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

3.8.20 config.active_record.record_timestamps

모델의 createupdate 작업에서 타임스탬프 기록 여부를 제어하는 boolean 값입니다. 기본값은 true입니다.

3.8.21 config.active_record.partial_inserts

boolean 값이며 새 레코드를 생성할 때 partial writes를 사용할지 여부를 제어합니다(즉, 기본값과 다른 속성만 insert할지 여부).

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

Starting with version The default value is
(original) true
7.0 false

3.8.22 config.active_record.partial_updates

boolean 값이며 기존 레코드를 업데이트할 때 partial writes를 사용할지 여부를 제어합니다(즉, dirty 상태인 속성만 업데이트할지 여부). partial updates를 사용할 때는 동시 업데이트가 오래된 읽기 상태를 기반으로 속성을 쓸 수 있으므로 optimistic locking config.active_record.lock_optimistically도 함께 사용해야 합니다. 기본값은 true입니다.

3.8.23 config.active_record.maintain_test_schema

테스트를 실행할 때 Active Record가 테스트 데이터베이스 스키마를 db/schema.rb(또는 db/structure.sql)와 동기화된 상태로 유지할지 여부를 제어하는 boolean 값입니다. 기본값은 true입니다.

3.8.24 config.active_record.dump_schema_after_migration

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

3.8.25 config.active_record.dump_schemas

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

3.8.26 config.active_record.before_committed_on_all_records

트랜잭션에 등록된 모든 레코드에서 before_committed! 콜백을 활성화합니다. 이전 동작은 레코드의 첫 번째 복사본에서만 콜백을 실행하는 것이었습니다.

트랜잭션에 동일한 레코드의 복사본이 여러 개 등록된 경우.

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

3.8.27 config.active_record.belongs_to_required_by_default

belongs_to 관계가 존재하지 않을 때 레코드의 유효성 검사가 실패할지 여부를 제어하는 boolean 값입니다.

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

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

3.8.28 config.active_record.belongs_to_required_validates_foreign_key

부모가 필수일 때 부모 관련 컬럼만 존재 여부를 검증하도록 활성화합니다. 이전 동작은 부모 레코드의 존재 여부를 검증하는 것이었는데, 이는 부모가 변경되지 않았더라도 자식 레코드가 업데이트될 때마다 부모를 가져오기 위한 추가 쿼리를 수행했습니다.

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

3.8.29 config.active_record.marshalling_format_version

7.1로 설정하면 Marshal.dump를 사용한 Active Record 인스턴스의 더 효율적인 직렬화가 가능합니다.

이는 직렬화 형식을 변경하므로, 이 방식으로 직렬화된 모델은 이전 버전(< 7.1)의 Rails에서 읽을 수 없습니다. 하지만 이 최적화가 활성화되어 있는지 여부와 관계없이 이전 형식을 사용하는 메시지는 여전히 읽을 수 있습니다.

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

3.8.30 config.active_record.action_on_strict_loading_violation

관계에 strict_loading이 설정되어 있을 때 예외를 발생시키거나 로깅하도록 활성화합니다. 모든 환경에서 기본값은 :raise입니다. 예외를 발생시키는 대신 로거에 위반 사항을 보내려면 :log로 변경할 수 있습니다.

3.8.31 config.active_record.strict_loading_by_default

기본적으로 strict_loading 모드를 활성화하거나 비활성화하는 boolean 값입니다. 기본값은 false입니다.

3.8.32 config.active_record.strict_loading_mode

strict loading이 보고되는 모드를 설정합니다. 기본값은 :all입니다. N + 1 쿼리를 유발하는 association을 로딩할 때만 보고하도록 :n_plus_one_only로 변경할 수 있습니다.

3.8.33 config.active_record.index_nested_attribute_errors

중첩된 has_many 관계에 대한 에러를 인덱스와 함께 표시할 수 있게 합니다. 기본값은 false입니다.

3.8.34 config.active_record.use_schema_cache_dump

사용자가 데이터베이스에 쿼리를 보내지 않고도 db/schema_cache.yml(bin/rails db:schema:cache:dump로 생성됨)에서 schema cache 정보를 가져올 수 있게 합니다. 기본값은 true입니다.

3.8.35 config.active_record.cache_versioning

#cache_version 메소드에서 변경되는 버전이 포함된 안정적인 #cache_key 메소드를 사용할지 여부를 나타냅니다.

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

Starting with version The default value is
(original) false
5.2 true

3.8.36 config.active_record.collection_cache_versioning

ActiveRecord::Relation 타입의 캐시되는 객체가 변경될 때 relation의 cache key의 volatile 정보(최대 업데이트 시점과 개수)를 cache version으로 이동하여 cache key 재사용을 지원할 수 있게 합니다.

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

Starting with version The default value is
(original) false
6.0 true

3.8.37 config.active_record.has_many_inversing

belongs_to에서 has_many 연관관계를 순회할 때 역방향 레코드 설정을 활성화합니다.

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

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

3.8.38 config.active_record.automatic_scope_inversing

scope가 있는 연관관계에 대해 inverse_of를 자동으로 유추하는 것을 활성화합니다.

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

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

3.8.39 config.active_record.destroy_association_async_job

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

3.8.40 config.active_record.destroy_association_async_batch_size

dependent: :destroy_async 연관관계 옵션으로 백그라운드 job에서 삭제될 최대 레코드 수를 지정할 수 있습니다. 다른 조건이 동일할 때, 낮은 batch size는 더 많고 짧게 실행되는 백그라운드 job을 생성하고, 높은 batch size는 더 적고 오래 실행되는 백그라운드 job을 생성합니다. 이 옵션의 기본값은 nil이며, 이는 주어진 연관관계에 대한 모든 종속 레코드가 동일한 백그라운드 job에서 삭제됨을 의미합니다.

3.8.41 config.active_record.queues.destroy

destroy job에 사용할 Active Job queue를 지정할 수 있습니다. 이 옵션이 nil일 때, purge job은 기본 Active Job queue로 전송됩니다(참조: config.active_job.default_queue_name). 기본값은 nil입니다.

3.8.42 config.active_record.enumerate_columns_in_select_statements

true일 때, SELECT 구문에 항상 컬럼 이름을 포함하고, 와일드카드 SELECT * FROM ... 쿼리를 피합니다. 이는 예를 들어 PostgreSQL 데이터베이스에 컬럼을 추가할 때 prepared statement 캐시 오류를 방지합니다. 기본값은 false입니다.

3.8.43 config.active_record.verify_foreign_keys_for_fixtures

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

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

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

3.8.44 config.active_record.raise_on_assign_to_attr_readonly

attr_readonly 속성에 대한 할당 시 예외를 발생시킵니다. 이전 동작에서는 할당은 허용되었지만 데이터베이스에 변경사항이 조용히 저장되지 않았습니다.

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

3.8.45 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 콜백 대신 실행됩니다.
    • 레코드가 트랜잭션 내에서 삭제된 경우, 오래된 인스턴스가 이후에 업데이트를 수행했더라도(0개의 행에 영향을 미침) after_destroy_commit 콜백은 마지막으로 삭제된 인스턴스에서 실행됩니다.

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

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

3.8.46 config.active_record.default_column_serializer

특정 컬럼에 대해 명시적으로 지정되지 않은 경우 사용할 serializer 구현체입니다.

역사적으로 serializestore는 대체 serializer 구현체 사용을 허용하면서 기본적으로 YAML을 사용했지만, 이는 매우 효율적이지 않은 포맷이며 주의해서 사용하지 않으면 보안 취약점의 원인이 될 수 있습니다.

따라서 데이터베이스 직렬화에 더 제한적이고 엄격한 포맷을 선호하는 것이 권장됩니다.

안타깝게도 Ruby 표준 라이브러리에는 적합한 기본값이 없습니다. JSON이 포맷으로 작동할 수 있지만, json gem은 지원되지 않는 타입을 문자열로 변환하여 버그를 유발할 수 있습니다.

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

| 시작 버전 | 기본값 |

3.8.47 config.active_record.run_after_transaction_callbacks_in_order_defined

true일 때, 모델에 정의된 순서대로 after_commit 콜백이 실행됩니다. false일 때는 역순으로 실행됩니다.

다른 모든 콜백들은 항상 모델에 정의된 순서대로 실행됩니다(prepend: true를 사용하지 않는 한).

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

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

3.8.48 config.active_record.query_log_tags_enabled

어댑터 수준의 쿼리 주석을 활성화할지 여부를 지정합니다. 기본값은 false이지만, 기본 생성된 config/environments/development.rb 파일에서는 true로 설정됩니다.

이것이 true로 설정되면 데이터베이스 prepared statements가 자동으로 비활성화됩니다.

3.8.49 config.active_record.query_log_tags

SQL 주석에 삽입될 key/value 태그를 지정하는 Array를 정의합니다. 기본값은 [ :application, :controller, :action, :job ]입니다. 사용 가능한 태그는 :application, :controller, :namespaced_controller, :action, :job, :source_location입니다.

3.8.50 config.active_record.query_log_tags_format

태그에 사용할 포맷터를 지정하는 Symbol입니다. 유효한 값은 :sqlcommenter:legacy입니다.

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

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

3.8.51 config.active_record.cache_query_log_tags

쿼리 로그 태그의 캐싱을 활성화할지 여부를 지정합니다. 많은 수의 쿼리를 실행하는 애플리케이션의 경우, 요청이나 작업 실행 기간 동안 컨텍스트가 변경되지 않을 때 쿼리 로그 태그를 캐싱하면 성능상의 이점을 얻을 수 있습니다. 기본값은 false입니다.

3.8.52 config.active_record.schema_cache_ignored_tables

스키마 캐시 생성 시 무시되어야 할 테이블 목록을 정의합니다. 테이블 이름을 나타내는 문자열이나 정규식을 포함하는 Array를 받습니다.

3.8.53 config.active_record.verbose_query_logs

데이터베이스 쿼리를 호출하는 메서드의 소스 위치를 관련 쿼리 아래에 로깅해야 하는지 지정합니다. 기본적으로 development 환경에서는 true이고 다른 모든 환경에서는 false입니다.

3.8.54 config.active_record.sqlite3_adapter_strict_strings_by_default

SQLite3Adapter가 strict strings 모드에서 사용되어야 하는지 지정합니다. strict strings 모드를 사용하면 큰따옴표로 된 문자열 리터럴이 비활성화됩니다.

SQLite는 큰따옴표로 된 문자열 리터럴과 관련하여 몇 가지 특이사항이 있습니다. 먼저 큰따옴표로 된 문자열을 식별자 이름으로 간주하려 하지만, 해당 식별자가 존재하지 않으면 문자열 리터럴로 간주합니다. 이러한 이유로 오타가 조용히 간과될 수 있습니다. 예를 들어, 존재하지 않는 컬럼에 대한 인덱스를 생성하는 것이 가능합니다. 자세한 내용은 SQLite 문서를 참조하세요.

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

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

3.8.55 config.active_record.postgresql_adapter_decode_dates

PostgresqlAdapter가 date 컬럼을 디코딩해야 하는지 지정합니다.

ActiveRecord::Base.connection
     .select_value("select '2024-01-01'::date").class #=> Date

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

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

3.8.56 config.active_record.async_query_executor

비동기 쿼리가 어떻게 pool되는지 지정합니다.

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

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

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

3.8.57 config.active_record.global_executor_concurrency

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

기본값은 4입니다.

이 숫자는 database.yml에 구성된 데이터베이스 connection pool 크기와 함께 고려되어야 합니다. Connection pool은 foreground 스레드(예: 웹 서버 또는 job worker 스레드)와 background 스레드를 모두 수용할 수 있을 만큼 커야 합니다.

각 프로세스에 대해 Rails는 비동기 쿼리를 처리하기 위해 이만큼의 스레드를 사용하는 하나의 global query executor를 생성합니다. 따라서 pool 크기는 최소 thread_count + global_executor_concurrency + 1이어야 합니다. 예를 들어, 웹 서버의 최대 스레드가 3개이고 global_executor_concurrency가 4로 설정된 경우 pool 크기는 최소 8이어야 합니다.

3.8.58 config.active_record.yaml_column_permitted_classes

기본값은 [Symbol]입니다. 애플리케이션이 ActiveRecord::Coders::YAMLColumnsafe_load()에 추가 허용 클래스를 포함할 수 있게 합니다.

3.8.59 config.active_record.use_yaml_unsafe_load

기본값은 false입니다. 애플리케이션이 ActiveRecord::Coders::YAMLColumn에서 unsafe_load 사용을 선택할 수 있게 합니다.

3.8.60 config.active_record.raise_int_wider_than_64bit

기본값은 true입니다. PostgreSQL 어댑터에 signed 64bit 표현보다 더 큰 정수가 제공될 때 예외를 발생시킬지 여부를 결정합니다.

3.8.61 config.active_record.generate_secure_token_on

has_secure_token 선언에 대한 값을 생성할 시점을 제어합니다. 기본적으로 model이 초기화될 때 값을 생성합니다:

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"

기본적으로 토큰은 레코드가 생성될 때만 생성됩니다.

시작 버전 기본값
(original) :create
7.1 :initialize

3.8.62 config.active_record.permanent_connection_checkout

ActiveRecord::Base.connection이 에러를 발생시킬지, deprecation 경고를 표시할지, 아니면 아무것도 하지 않을지를 제어합니다.

ActiveRecord::Base.connection은 connection pool에서 데이터베이스 connection을 체크아웃하고 요청이나 job이 끝날 때까지 임대 상태를 유지합니다. 이 동작은 사용 가능한 connection보다 더 많은 thread나 fiber를 사용하는 환경에서는 바람직하지 않을 수 있습니다.

이 설정은 ActiveRecord::Base.connection을 호출하는 코드를 추적하고 제거하여 대신 ActiveRecord::Base.with_connection을 사용하도록 마이그레이션하는 데 사용될 수 있습니다.

이 값은 :disallowed, :deprecated, 또는 true로 설정할 수 있으며, 각각 에러 발생, deprecation 경고 표시, 또는 아무것도 하지 않음을 의미합니다.

시작 버전 기본값
(original) true

3.8.63 config.active_record.database_cli

rails dbconsole을 실행할 때 데이터베이스 접근에 사용될 CLI 도구를 제어합니다. 기본적으로 데이터베이스의 표준 도구가 사용됩니다(예: PostgreSQL의 경우 psql, MySQL의 경우 mysql). 이 옵션은 데이터베이스 시스템별로 도구를 지정하는 hash를 받으며, fallback 옵션이 필요한 경우 배열을 사용할 수 있습니다.

# config/application.rb

config.active_record.database_cli = { postgresql: "pgcli", mysql: %w[ mycli mysql ] }

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

Active Record MySQL adapter가 모든 tinyint(1) 컬럼을 boolean으로 취급할지 여부를 제어합니다. 기본값은 true입니다.

3.8.65 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables

PostgreSQL에 의해 생성되는 데이터베이스 테이블이 "unlogged"여야 하는지를 제어합니다. 이는 성능을 향상시킬 수 있지만 데이터베이스가 충돌할 경우 데이터 손실의 위험이 있습니다. production 환경에서는 이 기능을 활성화하지 않는 것을 강력히 권장합니다. 모든 환경에서 기본값은 false입니다.

테스트에서 이를 활성화하려면:

# config/environments/test.rb

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

3.8.66 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type

마이그레이션이나 스키마에서 datetime을 호출할 때 Active Record PostgreSQL adapter가 사용해야 하는 네이티브 타입을 제어합니다. 설정된 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

schema.rb를 rebuild하려면 bin/rails db:migrate를 실행해야 합니다.

3.8.67 ActiveRecord::SchemaDumper.ignore_tables

생성된 schema 파일에 포함하지 않을 테이블 배열을 받습니다.

3.8.68 ActiveRecord::SchemaDumper.fk_ignore_pattern

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

3.8.69 config.active_record.encryption.add_to_filter_parameters

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

기본값은 true입니다.

3.8.70 config.active_record.encryption.hash_digest_class

Active Record Encryption에서 사용하는 digest 알고리즘을 설정합니다.

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

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

3.8.71 config.active_record.encryption.support_sha1_for_non_deterministic_encryption

SHA-1 digest 클래스를 사용하여 암호화된 기존 데이터의 복호화 지원을 활성화합니다. false일 경우, config.active_record.encryption.hash_digest_class에 구성된 digest만 지원합니다.

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

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

3.8.72 config.active_record.encryption.compressor

Active Record Encryption에서 사용하는 압축기를 설정합니다. 기본값은 Zlib입니다.

deflateinflate에 응답하는 클래스를 설정하여 자신만의 압축기를 사용할 수 있습니다.

3.8.73 config.active_record.protocol_adapters

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

config.active_record.protocol_adapters.mysql = "trilogy" 

MySQL에 대한 프로토콜 어댑터를 trilogy로 설정합니다.

매핑이 없는 경우, protocol이 adapter 이름으로 사용됩니다.

3.9 Action Controller 설정하기

config.action_controller는 다음과 같은 설정들을 포함합니다:

3.9.1 config.action_controller.asset_host

assets의 host를 설정합니다. CDN이 애플리케이션 서버 자체가 아닌 assets를 호스팅하는데 사용될 때 유용합니다. Action Mailer에 대해 다른 설정이 있는 경우에만 이것을 사용해야 하며, 그렇지 않으면 config.asset_host를 사용하세요.

3.9.2 config.action_controller.perform_caching

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

3.9.3 config.action_controller.default_static_extension

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

3.9.4 config.action_controller.include_all_helpers

모든 view helper가 어디서나 사용 가능한지 또는 해당 controller에 범위가 지정되는지를 설정합니다. false로 설정하면, UsersHelper 메서드는 UsersController의 일부로 렌더링되는 view에서만 사용할 수 있습니다. true이면 UsersHelper 메서드를 어디서나 사용할 수 있습니다. 이 옵션이 명시적으로 true 또는 false로 설정되지 않은 경우의 기본 설정 동작은 모든 view helper가 각 controller에서 사용 가능하다는 것입니다.

3.9.5 config.action_controller.logger

Log4r 또는 기본 Ruby Logger 클래스의 인터페이스를 준수하는 logger를 받아들이며, 이는 Action Controller의 정보를 로깅하는 데 사용됩니다. 로깅을 비활성화하려면 nil로 설정하세요.

3.9.6 config.action_controller.request_forgery_protection_token

RequestForgery의 토큰 파라미터 이름을 설정합니다. protect_from_forgery를 호출하면 기본적으로 :authenticity_token으로 설정됩니다.

3.9.7 config.action_controller.allow_forgery_protection

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

3.9.8 config.action_controller.forgery_protection_origin_check

추가적인 CSRF 방어로 HTTP Origin 헤더를 사이트의 origin과 비교 확인할지 여부를 설정합니다.

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

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

3.9.9 config.action_controller.per_form_csrf_tokens

CSRF 토큰이 생성된 method/action에 대해서만 유효한지 여부를 설정합니다.

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

| 시작 버전 | 기본값 |

3.9.10 config.action_controller.default_protect_from_forgery

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

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

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

3.9.11 config.action_controller.relative_url_root

Rails에게 하위 디렉토리에 배포한다는 것을 알려주는 데 사용할 수 있습니다. 기본값은 config.relative_url_root입니다.

3.9.12 config.action_controller.permit_all_parameters

mass assignment를 위한 모든 파라미터를 기본적으로 허용하도록 설정합니다. 기본값은 false입니다.

3.9.13 config.action_controller.action_on_unpermitted_parameters

명시적으로 허용되지 않은 파라미터가 발견되었을 때의 동작을 제어합니다. 기본값은 test와 development 환경에서는 :log이며, 그 외에는 false입니다. 값은 다음과 같을 수 있습니다:

  • false: 아무 동작도 하지 않음
  • :log: unpermitted_parameters.action_controller 토픽에 대해 ActiveSupport::Notifications.instrument 이벤트를 발생시키고 DEBUG 레벨로 로깅
  • :raise: ActionController::UnpermittedParameters 예외를 발생

3.9.14 config.action_controller.always_permitted_parameters

기본적으로 허용되는 파라미터 목록을 설정합니다. 기본값은 ['controller', 'action']입니다.

3.9.15 config.action_controller.enable_fragment_cache_logging

fragment cache 읽기와 쓰기를 다음과 같은 상세 형식으로 로깅할지 여부를 결정합니다:

fragment 읽기 views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms)
messages/_message.html.erb 렌더링 완료 1.2 ms [cache hit]
fragment 쓰기 views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms)
recordings/threads/_thread.html.erb 렌더링 완료 1.5 ms [cache miss]

기본적으로 false로 설정되어 있으며 다음과 같은 결과가 출력됩니다:

메시지/_message.html.erb가 1.2ms에 렌더링됨 [cache hit]
recordings/threads/_thread.html.erb가 1.5ms에 렌더링됨 [cache miss]

3.9.16 config.action_controller.raise_on_missing_callback_actions

컨트롤러에서 콜백의 :only 또는 :except 옵션에 지정된 액션이 없을 때 AbstractController::ActionNotFound를 발생시킵니다.

버전 시작 기본값
(원본) false
7.1 true (development와 test), false (다른 환경)

3.9.17 config.action_controller.raise_on_open_redirects

외부 호스트로의 의도하지 않은 리다이렉트("open redirect"라고도 함)로부터 애플리케이션을 보호하기 위해 외부 리다이렉트를 명시적으로 선택해야 하도록 합니다.

이 설정이 true로 되어 있을 때, 외부 호스트를 가진 URL이 redirect_to에 전달되면 ActionController::Redirecting::UnsafeRedirectError가 발생합니다. open redirect를 허용해야 하는 경우에는 redirect_to 호출에 allow_other_host: true를 추가할 수 있습니다.

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

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

3.9.18 config.action_controller.log_query_tags_around_actions

around_filter를 통해 query tag를 위한 컨트롤러 컨텍스트가 자동으로 업데이트될지 여부를 결정합니다. 기본값은 true입니다.

3.9.19 config.action_controller.wrap_parameters_by_default

Rails 7.0 이전에는, 새로운 애플리케이션이 JSON 요청에 대해 ActionController::Base에서 파라미터 래핑을 활성화하는 wrap_parameters.rb라는 이름의 initializer와 함께 생성되었습니다.

이 설정값을 true로 설정하면 initializer와 동일한 동작을 하므로, 파라미터 래핑 동작을 커스터마이즈하지 않으려는 애플리케이션은 initializer를 제거할 수 있습니다.

이 값과 관계없이, 애플리케이션은 이전처럼 initializer나 각 컨트롤러에서 파라미터 래핑 동작을 커스터마이즈할 수 있습니다.

파라미터 래핑에 대한 자세한 내용은 ParamsWrapper를 참조하세요.

wrapping.

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

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

3.9.20 ActionController::Base.wrap_parameters

ParamsWrapper를 설정합니다. 이는 최상위 레벨에서 또는 개별 controller에서 호출될 수 있습니다.

3.10 Action Dispatch 설정하기

3.10.1 config.action_dispatch.cookies_serializer

쿠키에 사용할 serializer를 지정합니다. config.active_support.message_serializer와 동일한 값을 받으며, :json_allow_marshal의 별칭인 :hybrid도 추가로 사용할 수 있습니다.

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

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

3.10.2 config.action_dispatch.debug_exception_log_level

요청 중 처리되지 않은 예외를 로깅할 때 ActionDispatch::DebugExceptions 미들웨어가 사용하는 로그 레벨을 설정합니다.

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

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

3.10.3 config.action_dispatch.default_headers

각 응답에서 기본적으로 설정되는 HTTP 헤더들을 포함하는 해시입니다.

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

시작 버전 기본값
(original)
{
"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"
}

3.10.4 config.action_dispatch.default_charset

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

3.10.5 config.action_dispatch.tld_length

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

3.10.6 config.action_dispatch.ignore_accept_header

요청의 accept 헤더를 무시할지 결정하는 데 사용됩니다. 기본값은 false입니다.

3.10.7 config.action_dispatch.x_sendfile_header

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

3.10.8 config.action_dispatch.http_auth_salt

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

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

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

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

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

암호화된 쿠키에 사용할 cipher를 설정합니다. 기본값은 "aes-256-gcm"입니다.

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

3.10.15 config.action_dispatch.cookies_rotations

암호화되고 서명된 쿠키의 secrets, ciphers, digests를 교체할 수 있게 합니다.

서명되고 암호화된 쿠키가 AES-256-GCM cipher를 사용할지 또는 이전의 AES-256-CBC cipher를 사용할지 제어합니다.

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

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

3.10.17 config.action_dispatch.use_cookies_with_metadata

목적 메타데이터가 포함된 쿠키 작성을 활성화합니다.

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

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

3.10.18 config.action_dispatch.perform_deep_munge

파라미터에 대해 deep_munge 메서드를 수행할지 여부를 설정합니다. 자세한 내용은 보안 가이드를 참조하세요. 기본값은 true입니다.

3.10.19 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, # 알 수 없는 HTTP 메서드
  "ActionController::NotImplemented" => :not_implemented, # 구현되지 않음
  "ActionController::UnknownFormat" => :not_acceptable, # 알 수 없는 형식
  "ActionDispatch::Http::MimeNegotiation::InvalidType" => :not_acceptable, # 유효하지 않은 MIME 타입
  "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_found, # 레코드를 찾을 수 없음
  "ActiveRecord::StaleObjectError" => :conflict, # 낡은 객체 충돌
  "ActiveRecord::RecordInvalid" => :unprocessable_entity, # 유효하지 않은 레코드
  "ActiveRecord::RecordNotSaved" => :unprocessable_entity # 레코드 저장 실패
}

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

3.10.20 config.action_dispatch.cookies_same_site_protection

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

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

user-agent가 "TestAgent"인 경우를 제외하고 모든 요청에 대해 쿠키 SameSite 보호를 :strict로 설정합니다.

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

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

3.10.21 config.action_dispatch.ssl_default_redirect_status

ActionDispatch::SSL middleware에서 HTTP에서 HTTPS로 GET/HEAD가 아닌 요청을 리다이렉트할 때 사용되는 기본 HTTP 상태 코드를 설정합니다.

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

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

3.10.22 config.action_dispatch.log_rescued_responses

rescue_responses에 설정된 처리되지 않은 예외들의 로깅을 활성화합니다. 기본값은 true입니다.

3.10.23 config.action_dispatch.show_exceptions

config.action_dispatch.show_exceptions 설정은 Action Pack(특히 ActionDispatch::ShowExceptions middleware)이 요청에 응답하는 동안 발생한 예외를 처리하는 방식을 제어합니다.

값을 :all로 설정하면 Action Pack이 예외를 rescue하고 해당하는 에러 페이지를 렌더링하도록 설정됩니다. 예를 들어, Action Pack은 ActiveRecord::RecordNotFound 예외를 rescue하고 404 Not found 상태 코드와 함께 public/404.html의 내용을 렌더링합니다.

값을 :rescuable로 설정하면 Action Pack이 config.action_dispatch.rescue_responses에 정의된 예외만 rescue하고 나머지는 모두 발생시키도록 설정됩니다. 예를 들어, Action Pack은 ActiveRecord::RecordNotFound는 rescue하지만 NoMethodError는 발생시킵니다.

값을 :none으로 설정하면 Action Pack이 모든 예외를 발생시키도록 설정됩니다.

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

3.10.24 config.action_dispatch.strict_freshness

ActionDispatch::ETag middleware가 응답에 두 헤더가 모두 있을 때 Last-Modified 헤더보다 ETag 헤더를 우선시할지 여부를 설정합니다.

true로 설정하면, RFC 7232 섹션 6에 명시된 대로 두 헤더가 모두 있을 때 ETag만 고려됩니다.

false로 설정된 경우, 두 헤더가 모두 있을 때 두 헤더 모두 검사되며 응답이 신선한 것으로 간주되려면 두 헤더가 모두 일치해야 합니다.

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

요청이 안전하지 않은 것으로 표시되거나, SSL을 통해 요청이 이루어지거나, onion 서비스로 요청이 이루어진 경우 요청 끝에 쿠키가 작성됩니다.

true로 설정하면 이러한 조건이 충족되지 않더라도 쿠키가 작성됩니다.

이는 development 환경에서는 기본값이 true이고, 다른 모든 환경에서는 false입니다.

3.10.26 ActionDispatch::Callbacks.before

요청 전에 실행할 코드 블록을 받습니다.

3.10.27 ActionDispatch::Callbacks.after

요청 후에 실행할 코드 블록을 받습니다.

3.11 Action View 구성하기

config.action_view는 소수의 구성 설정을 포함합니다:

3.11.1 config.action_view.cache_template_loading

템플릿을 각 요청마다 다시 로드할지 여부를 제어합니다. 기본값은 !config.enable_reloading입니다.

3.11.2 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" }

이 코드는 에러가 있는 필드를 감싸기 위한 div를 생성합니다.

3.11.3 config.action_view.default_form_builder

Rails에게 기본적으로 사용할 form builder를 알려줍니다. 기본값은 ActionView::Helpers::FormBuilder 입니다. form builder 클래스를 초기화 이후에 로드하기를 원한다면(개발 환경에서 매 요청마다 다시 로드되도록), String으로 전달할 수 있습니다.

3.11.4 config.action_view.logger

Log4r 또는 기본 Ruby Logger 클래스의 인터페이스를 준수하는 logger를 받아들이며, 이는 Action View에서 정보를 로깅하는데 사용됩니다. 로깅을 비활성화하려면 nil로 설정하세요.

3.11.5 config.action_view.erb_trim_mode

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

3.11.6 config.action_view.frozen_string_literal

ERB 템플릿을 # frozen_string_literal: true magic comment와 함께 컴파일하여 모든 문자열 리터럴을 frozen으로 만들고 할당을 절약합니다. 모든 view에 대해 활성화하려면 true로 설정하세요.

3.11.7 config.action_view.embed_authenticity_token_in_remote_forms

remote: true가 있는 폼에서 authenticity_token의 기본 동작을 설정할 수 있습니다. 기본적으로 false로 설정되어 있어, remote 폼에 authenticity_token이 포함되지 않습니다. 이는 폼을 fragment-caching할 때 유용합니다. Remote 폼은 meta 태그에서 authenticity를 가져오므로, JavaScript를 지원하지 않는 브라우저를 지원하는 경우가 아니라면 embedding은 불필요합니다. 이러한 경우 폼 옵션으로 authenticity_token: true를 전달하거나 이 설정을 true로 설정할 수 있습니다.

3.11.8 config.action_view.prefix_partial_path_with_controller_namespace

네임스페이스가 있는 컨트롤러에서 렌더링된 템플릿에서 partial을 하위 디렉토리에서 찾을지 여부를 결정합니다. 예를 들어, Admin::ArticlesController라는 컨트롤러가 다음 템플릿을 렌더링하는 경우를 고려해보세요:

<%= render @article %>

기본 설정은 true이며, /admin/articles/_article.erb 부분 템플릿을 사용합니다. 값을 false로 설정하면 /articles/_article.erb를 렌더링하며, 이는 ArticlesController와 같은 네임스페이스가 없는 컨트롤러에서 렌더링하는 것과 동일한 동작입니다.

3.11.9 config.action_view.automatically_disable_submit_tag

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

3.11.10 config.action_view.debug_missing_translation

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

3.11.11 config.action_view.form_with_generates_remote_forms

form_with가 remote form을 생성할지 여부를 결정합니다.

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

시작 버전 기본값
5.1 true
6.1 false

3.11.12 config.action_view.form_with_generates_ids

form_with가 input에 id를 생성할지 여부를 결정합니다.

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

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

3.11.13 config.action_view.default_enforce_utf8

오래된 버전의 Internet Explorer에서 UTF-8로 인코딩된 폼을 제출하도록 강제하는 hidden 태그를 생성할지 여부를 결정합니다.

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

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

3.11.14 config.action_view.image_loading

image_tag 헬퍼로 렌더링되는 <img> 태그의 loading 속성에 대한 기본값을 지정합니다. 예를 들어, "lazy"로 설정하면 image_tag로 렌더링되는 <img> 태그에 loading="lazy"가 포함되어 브라우저가 이미지가 뷰포트 근처에 있을 때까지 로딩을 대기하도록 지시합니다. (이 값은 image_tagloading: "eager"를 전달하는 등의 방법으로 이미지별로 재정의할 수 있습니다.) 기본값은 nil입니다.

3.11.15 config.action_view.image_decoding

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

3.11.16 config.action_view.annotate_rendered_view_with_filenames

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

javascript_include_tagstylesheet_link_tag가 asset을 preload하는 link 헤더를 생성할지 여부를 결정합니다.

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

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

3.11.18 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>

첫 번째는 직접 전달된 내용으로 input element를 생성합니다. 두 번째는 블록으로 전달된 내용으로 button element를 생성합니다.

이 값을 true로 설정하면 두 경우 모두 button_to<form> 내부에 <button> 태그를 생성하도록 합니다.

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

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

3.11.19 config.action_view.apply_stylesheet_media_default

stylesheet_link_tagmedia 속성이 제공되지 않을 때 기본값으로 screen을 렌더링할지 여부를 결정합니다.

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

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

3.11.20 config.action_view.prepend_content_exfiltration_prevention

form_tagbutton_to 헬퍼가 브라우저에서 안전하지만 (기술적으로는 유효하지 않은) HTML을 태그 앞에 추가하여 내용이 앞선 닫히지 않은 태그에 의해 캡처되는 것을 방지할지 여부를 결정합니다. 기본값은 false입니다.

3.11.21 config.action_view.sanitizer_vendor

ActionView::Helpers::SanitizeHelper.sanitizer_vendor를 설정하여 Action View에서 사용되는 HTML sanitizer 세트를 구성합니다. 기본값은 config.load_defaults 대상 버전에 따라 달라집니다:

시작 버전 기본값 마크업 파싱 방식
(original) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (참고 참조) HTML5

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

3.12 Action Mailbox 구성하기

config.action_mailbox는 다음과 같은 구성 옵션을 제공합니다:

3.12.1 config.action_mailbox.logger

Action Mailbox에서 사용하는 logger를 포함합니다. Log4r나 기본 Ruby Logger 클래스의 인터페이스를 따르는 logger를 허용합니다. 기본값은 Rails.logger입니다.

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

3.12.2 config.action_mailbox.incinerate_after

ActionMailbox::InboundEmail 레코드가 처리된 후 얼마 뒤에 삭제될지를 나타내는 ActiveSupport::Duration 값을 지정합니다. 기본값은 30.days입니다.

# 처리 후 14일이 지난 수신 이메일들을 삭제합니다.
config.action_mailbox.incinerate_after = 14.days

3.12.3 config.action_mailbox.queues.incineration

소각 작업에 사용할 Active Job queue를 나타내는 심볼을 받습니다. 이 옵션이 nil인 경우, 소각 작업은 기본 Active Job queue로 전송됩니다 (config.active_job.default_queue_name 참조).

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

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

3.12.4 config.action_mailbox.queues.routing

라우팅 작업에 사용할 Active Job queue를 나타내는 심볼을 받습니다. 이 옵션이 nil인 경우, 라우팅 작업은 기본 Active Job queue로 전송됩니다 (config.active_job.default_queue_name 참조).

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

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

3.12.5 config.action_mailbox.storage_service

이메일 업로드에 사용할 Active Storage 서비스를 나타내는 심볼을 받습니다. 이 옵션이 nil인 경우, 이메일은 기본 Active Storage 서비스에 업로드됩니다 (config.active_storage.service 참조).

3.13 Action Mailer 설정하기

config.action_mailer에서 사용할 수 있는 여러 설정들이 있습니다:

3.13.1 config.action_mailer.asset_host

asset들의 host를 설정합니다. CDN이 애플리케이션 서버 자체가 아닌 asset 호스팅에 사용될 때 유용합니다. Action Controller에 대해 다른 설정이 있는 경우에만 이것을 사용해야 하며, 그렇지 않으면 config.asset_host를 사용하세요.

3.13.2 config.action_mailer.logger

Log4r 인터페이스나 기본 Ruby Logger 클래스를 준수하는 logger를 받아들이며, 이는 Action Mailer의 정보를 로깅하는데 사용됩니다. 로깅을 비활성화하려면 nil로 설정하세요.

3.13.3 config.action_mailer.smtp_settings

:smtp 전송 방법에 대한 상세 설정을 허용합니다. 다음 옵션들을 포함할 수 있는 hash를 받습니다:

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

추가로, Mail::SMTP가 지원하는 모든 설정 옵션을 전달할 수 있습니다.

3.13.4 config.action_mailer.smtp_timeout

버전 2.8.0 이전에는 mail gem이 SMTP 요청에 대한 기본 타임아웃을 설정하지 않았습니다. 이 설정을 통해 애플리케이션에서 mail gem의 :open_timeout:read_timeout에 대한 기본값을 설정할 수 있어서 요청이 무기한 멈추는 것을 방지할 수 있습니다.

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

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

3.13.5 config.action_mailer.sendmail_settings

:sendmail 전송 방법에 대한 상세 설정을 허용합니다. 다음 옵션들을 포함할 수 있는 hash를 받습니다:

  • :location - sendmail 실행 파일의 위치입니다. 기본값은 /usr/sbin/sendmail입니다.

  • :arguments - 명령줄 인수입니다. 기본값은 %w[ -i ]입니다.

3.13.6 config.action_mailer.file_settings

:file delivery method를 설정합니다. 다음과 같은 옵션들을 포함하는 해시를 받습니다:

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

3.13.7 config.action_mailer.raise_delivery_errors

이메일 전송이 완료되지 않을 때 오류를 발생시킬지 여부를 지정합니다. 기본값은 true입니다.

3.13.8 config.action_mailer.delivery_method

delivery method를 정의하며 기본값은 :smtp입니다. 자세한 내용은 Action Mailer 가이드의 설정 섹션을 참조하세요.

3.13.9 config.action_mailer.perform_deliveries

메일이 실제로 전송될지 여부를 지정하며 기본값은 true입니다. 테스트 시에는 false로 설정하는 것이 편리할 수 있습니다.

3.13.10 config.action_mailer.default_options

Action Mailer의 기본값을 설정합니다. 모든 mailer에 대해 from이나 reply_to와 같은 옵션을 설정하는 데 사용됩니다. 기본값은 다음과 같습니다:

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

추가 옵션을 설정하기 위해 hash를 할당하세요:

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

3.13.11 config.action_mailer.observers

메일이 발송될 때 알림을 받을 observer들을 등록합니다.

config.action_mailer.observers = ["MailObserver"]

Observer를 사용하여 메일이 전송될 때 실행되는 hook을 등록할 수 있습니다. observer는 delivered_email(message)라는 단일 메서드를 구현해야 하며, 이는 메일이 성공적으로 전송된 후 호출됩니다.

3.13.12 config.action_mailer.interceptors

메일이 발송되기 전에 호출될 interceptor들을 등록합니다.

config.action_mailer.interceptors = ["MailInterceptor"]

3.13.13 config.action_mailer.preview_interceptors

메일이 미리보기되기 전에 호출될 interceptor를 등록합니다.

config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]

3.13.14 config.action_mailer.preview_paths

mailer preview들의 위치를 지정합니다. 이 configuration 옵션에 경로를 추가하면 해당 경로들이 mailer preview를 검색하는데 사용됩니다.

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

action_mailer의 preview를 검색할 경로를 추가합니다.

3.13.15 config.action_mailer.show_previews

mailer preview를 활성화하거나 비활성화합니다. 기본적으로 development 환경에서는 true로 설정되어 있습니다.

config.action_mailer.show_previews = false

Action Mailer 미리보기 기능을 비활성화합니다. 이 설정의 기본값은 development 환경에서는 true이고 그 외의 환경에서는 false입니다.

3.13.16 config.action_mailer.perform_caching

mailer 템플릿이 fragment caching을 수행할지 여부를 지정합니다. 지정되지 않은 경우 기본값은 true입니다.

3.13.17 config.action_mailer.deliver_later_queue_name

기본 delivery job에 사용할 Active Job queue를 지정합니다( config.action_mailer.delivery_job 참조). 이 옵션이 nil로 설정되면, delivery job은 기본 Active Job queue로 전송됩니다( config.active_job.default_queue_name 참조).

Mailer 클래스는 이를 재정의하여 다른 queue를 사용할 수 있습니다. 이는 기본 delivery job을 사용할 때만 적용됩니다. mailer가 custom job을 사용하는 경우에는 해당 job의 queue가 사용됩니다.

Active Job adapter가 지정된 queue를 처리하도록 구성되어 있는지 확인하세요. 그렇지 않으면 delivery job이 자동으로 무시될 수 있습니다.

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

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

3.13.18 config.action_mailer.delivery_job

메일의 delivery job을 지정합니다.

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

시작 버전 기본값
(original) ActionMailer::MailDeliveryJob
6.0 "ActionMailer::MailDeliveryJob"

3.14 Active Support 구성하기

Active Support에는 몇 가지 구성 옵션이 있습니다:

3.14.1 config.active_support.bare

Rails 부팅 시 active_support/all의 로딩을 활성화하거나 비활성화합니다. 기본값은 nil이며, 이는 active_support/all이 로드된다는 것을 의미합니다.

3.14.2 config.active_support.test_order

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

3.14.3 config.active_support.escape_html_entities_in_json

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

3.14.4 config.active_support.use_standard_json_time_format

날짜를 ISO 8601 형식으로 직렬화하는 것을 활성화하거나 비활성화합니다. 기본값은 true입니다.

3.14.5 config.active_support.time_precision

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

3.14.6 config.active_support.hash_digest_class

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

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

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

3.14.7 config.active_support.key_generator_hash_digest_class

암호화된 쿠키와 같이 구성된 secret base로부터 시크릿을 도출하는데 사용할 다이제스트 클래스를 구성할 수 있습니다.

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

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

3.14.8 config.active_support.use_authenticated_message_encryption

메시지 암호화를 위한 기본 암호로 AES-256-CBC 대신 AES-256-GCM 인증된 암호화를 사용할지 여부를 지정합니다.

기본값은 config.load_defaults 타겟 버전에 따라 달라집니다:

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

3.14.9 config.active_support.message_serializer

ActiveSupport::MessageEncryptorActiveSupport::MessageVerifier 인스턴스에서 사용되는 기본 serializer를 지정합니다. serializer 간의 마이그레이션을 쉽게 하기 위해, 제공된 serializer들은 여러 deserialization 포맷을 지원하는 fallback 메커니즘을 포함합니다:

Serializer Serialize와 deserialize Fallback deserialize
: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

message signing secret이 유출된 경우 Marshal은 deserialization 공격의 잠재적 벡터가 될 수 있습니다. 가능하다면 Marshal을 지원하지 않는 serializer를 선택하세요.

:message_pack:message_pack_allow_marshal serializer는 Symbol과 같이 JSON에서 지원하지 않는 일부 Ruby 타입의 roundtrip을 지원합니다. 또한 향상된 성능과 더 작은 payload 크기를 제공할 수 있습니다. 하지만 msgpack gem이 필요합니다.

위의 각 serializer는 대체 deserialization 포맷으로 fallback할 때 message_serializer_fallback.active_support 이벤트 알림을 발생시켜, 이러한 fallback이 얼마나 자주 발생하는지 추적할 수 있게 합니다.

또는 dumpload 메서드에 응답하는 모든 serializer 객체를 지정할 수 있습니다. 예를 들어:

config.active_support.message_serializer = YAML

message_serializer는 message를 직렬화하고 역직렬화하는 데 사용되는 serializer를 구성합니다. serializer는 YAML이나 JSON을 값으로 사용할 수 있습니다.

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

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

3.14.10 config.active_support.use_message_serializer_for_metadata

true일 때, 메시지 데이터와 메타데이터를 함께 직렬화하는 성능 최적화를 활성화합니다. 이는 메시지 형식을 변경하므로, 이 방식으로 직렬화된 메시지는 이전 버전(< 7.1)의 Rails에서 읽을 수 없습니다. 하지만 이 최적화 활성화 여부와 관계없이 이전 형식의 메시지는 여전히 읽을 수 있습니다.

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

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

3.14.11 config.active_support.cache_format_version

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

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

7.1은 효율성을 더욱 향상시키고, 만료되거나 버전이 일치하지 않는 캐시 항목을 값을 역직렬화하지 않고도 감지할 수 있게 합니다. 또한 view 프래그먼트와 같은 단순 문자열 값에 대한 최적화도 포함하고 있습니다.

모든 형식은 이전 버전과 이후 버전 모두와 호환되며, 이는 한 형식으로 작성된 캐시 항목을 다른 형식을 사용할 때도 읽을 수 있다는 것을 의미합니다. 이러한 동작으로 전체 캐시를 무효화하지 않고도 형식 간 마이그레이션이 쉽습니다.

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

시작 버전 기본 값
7.0 7.0
7.1 7.1

3.14.12 config.active_support.deprecation

deprecation warning들의 동작을 설정합니다. 사용 가능한 옵션에 대한 설명은 Deprecation::Behavior를 참고하세요.

기본 생성된 config/environments 파일에서, development 환경에서는 :log로, test 환경에서는 :stderr로 설정되며, production 환경에서는 config.active_support.report_deprecations를 위해 생략됩니다.

3.14.13 config.active_support.disallowed_deprecation

허용되지 않은 deprecation warning의 동작을 설정합니다. 사용 가능한 옵션에 대한 설명은 Deprecation::Behavior를 참고하세요.

이 옵션은 development와 test 환경을 위한 것입니다. Production 환경에서는 config.active_support.report_deprecations를 사용하세요.

3.14.14 config.active_support.disallowed_deprecation_warnings

Application이 허용하지 않는 것으로 간주하는 deprecation warning을 설정합니다. 이를 통해 예를 들어 특정 deprecation을 hard failure로 처리할 수 있습니다.

3.14.15 config.active_support.report_deprecations

false로 설정하면 application의 deprecators에서 허용되지 않은 deprecation을 포함한 모든 deprecation warning을 비활성화합니다. 이는 Rails와 deprecator를 deprecators 컬렉션에 추가할 수 있는 다른 gem의 모든 deprecation을 포함하지만, ActiveSupport::Deprecation에서 발생하는 모든 deprecation warning을 방지하지는 않을 수 있습니다.

기본 생성된 config/environments 파일에서, production 환경에서는 false로 설정됩니다.

3.14.16 config.active_support.isolation_level

Rails 내부 상태의 대부분의 지역성을 설정합니다. fiber 기반 서버나 job processor(예: falcon)를 사용하는 경우 :fiber로 설정해야 합니다. 그렇지 않으면 :thread 지역성을 사용하는 것이 가장 좋습니다. 기본값은 :thread입니다.

3.14.17 config.active_support.executor_around_test_case

테스트 케이스 주변에서 Rails.application.executor.wrap을 호출하도록 테스트 suite를 구성합니다. 이렇게 하면 테스트 케이스가 실제 요청이나 job과 더 유사하게 동작하게 됩니다. Active Record query cache와 비동기 쿼리와 같이 테스트에서 일반적으로 비활성화된 여러 기능이 활성화됩니다.

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

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

3.14.18 config.active_support.to_time_preserves_timezone

to_time 메서드가 수신자의 UTC offset을 보존할지 timezone을 보존할지를 지정합니다. :zone으로 설정하면 to_time 메서드는 수신자의 timezone을 사용합니다. :offset으로 설정하면 to_time 메서드는 UTC offset을 사용합니다. false로 설정하면 to_time 메서드는 대신 로컬 시스템의 UTC offset으로 변환합니다.

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

시작 버전 기본값
(original) false
5.0 :offset
8.0 :zone

3.14.19 ActiveSupport::Logger.silencer

블록 내에서 로깅을 무음 처리하는 기능을 비활성화하려면 false로 설정합니다. 기본값은 true입니다.

3.14.20 ActiveSupport::Cache::Store.logger

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

3.14.21 ActiveSupport.utc_to_local_returns_utc_offset_times

ActiveSupport::TimeZone.utc_to_local이 해당 offset을 포함하는 UTC 시간 대신 UTC offset이 있는 시간을 반환하도록 구성합니다.

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

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

3.14.22 config.active_support.raise_on_invalid_cache_expiration_time

Rails.cache fetch 또는 write에 잘못된 expires_at 또는 expires_in 시간이 주어졌을 때 ArgumentError를 발생시킬지 지정합니다.

옵션은 truefalse입니다. false인 경우 예외는 handled로 보고되고 대신 로그로 기록됩니다.

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

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

3.15 Active Job 설정하기

config.active_job는 다음과 같은 설정 옵션을 제공합니다:

3.15.1 config.active_job.queue_adapter

queuing backend에 대한 adapter를 설정합니다. 기본 adapter는 :async입니다. 최신 내장 adapter 목록은 ActiveJob::QueueAdapters API 문서를 참조하세요.

# adapter의 gem이 Gemfile에 있는지 확인하고 
# adapter의 구체적인 설치 및 
# 배포 지침을 따르세요.
config.active_job.queue_adapter = :sidekiq

3.15.2 config.active_job.default_queue_name

기본 queue 이름을 변경하는데 사용할 수 있습니다. 기본값은 "default"입니다.

config.active_job.default_queue_name = :medium_priority

기본 queue 이름을 설정합니다.

3.15.3 config.active_job.queue_name_prefix

모든 job의 queue 이름에 선택적으로 빈 값이 아닌 prefix를 설정할 수 있게 해줍니다. 기본값은 빈 값이며 사용되지 않습니다.

다음 설정은 production 환경에서 실행될 때 주어진 job을 production_high_priority queue에 배치합니다:

config.active_job.queue_name_prefix = Rails.env

queue 이름에 환경 이름을 접두사로 추가합니다.

class GuestsCleanupJob < ActiveJob::Base
  queue_as :high_priority
  #....
end

3.15.4 config.active_job.queue_name_delimiter

기본값은 '_'입니다. queue_name_prefix가 설정되어 있다면, queue_name_delimiter는 prefix와 prefix가 없는 queue 이름을 연결합니다.

다음 설정은 제공된 job을 video_server.low_priority queue에 넣을 것입니다:

# delimiter를 사용하기 위해서는 prefix가 반드시 설정되어야 합니다 
config.active_job.queue_name_prefix = "video_server"
config.active_job.queue_name_delimiter = "."
class EncoderJob < ActiveJob::Base
  queue_as :low_priority
  #....
end

3.15.5 config.active_job.logger

Log4r이나 기본 Ruby Logger 클래스의 인터페이스를 준수하는 logger를 허용하며, 이는 Active Job에서 정보를 로깅하는 데 사용됩니다. Active Job 클래스나 Active Job 인스턴스에서 logger를 호출하여 이 logger를 가져올 수 있습니다. 로깅을 비활성화하려면 nil로 설정하세요.

3.15.6 config.active_job.custom_serializers

커스텀 argument serializer를 설정할 수 있습니다. 기본값은 []입니다.

3.15.7 config.active_job.log_arguments

job의 인자들을 로깅할지 여부를 제어합니다. 기본값은 true입니다.

3.15.8 config.active_job.verbose_enqueue_logs

background job을 enqueue하는 메서드의 소스 위치가 관련 enqueue 로그 라인 아래에 기록되어야 하는지 지정합니다. 기본적으로 development 환경에서는 true이고 다른 모든 환경에서는 false입니다.

3.15.9 config.active_job.retry_jitter

실패한 job을 재시도할 때 계산되는 지연 시간에 적용되는 "jitter"(무작위 변동)의 양을 제어합니다.

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

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

3.15.10 config.active_job.log_query_tags_around_perform

query tag를 위한 job 컨텍스트가 around_perform을 통해 자동으로 업데이트될지 여부를 결정합니다. 기본값은 true입니다.

3.16 Action Cable 구성하기

3.16.1 config.action_cable.url

Action Cable 서버를 호스팅하는 URL을 문자열로 지정합니다. 이 옵션은 메인 애플리케이션과 분리된 Action Cable 서버를 실행할 때 사용합니다.

3.16.2 config.action_cable.mount_path

메인 서버 프로세스의 일부로 Action Cable을 마운트할 경로를 문자열로 지정합니다. 기본값은 /cable입니다. 일반 Rails 서버의 일부로 Action Cable을 마운트하지 않으려면 이 값을 nil로 설정할 수 있습니다.

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

3.16.3 config.action_cable.precompile_assets

Action Cable 애셋을 asset pipeline 사전 컴파일에 포함할지 여부를 결정합니다. Sprockets를 사용하지 않는 경우에는 영향을 미치지 않습니다. 기본값은 true입니다.

3.16.4 config.action_cable.allow_same_origin_as_host

cable 서버 자체와 일치하는 origin을 허용할지 여부를 결정합니다. 기본값은 true입니다.

same-origin 요청에 대한 자동 접근을 비활성화하고 구성된 origins만 엄격하게 허용하려면 false로 설정하세요.

3.16.5 config.action_cable.allowed_request_origins

cable 서버가 수락할 요청 origins를 결정합니다. development 환경에서의 기본값은 /https?:\/\/localhost:\d+/입니다.

3.17 Active Storage 구성하기

config.active_storage는 다음과 같은 구성 옵션을 제공합니다:

3.17.1 config.active_storage.variant_processor

:mini_magick 또는 :vips 심볼을 허용하며, variant 변환과 blob 분석을 MiniMagick과 ruby-vips 중 어느 것으로 수행할지 지정합니다.

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

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

3.17.2 config.active_storage.analyzers

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

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

이미지 analyzer들은 이미지 blob의 너비와 높이를 추출할 수 있습니다. video analyzer는 video blob의 너비, 높이, 지속시간, 각도, 화면비, 비디오/오디오 채널의 존재 여부를 추출할 수 있습니다. audio analyzer는 오디오 blob의 지속시간과 비트레이트를 추출할 수 있습니다.

3.17.3 config.active_storage.previewers

Active Storage blob에서 사용 가능한 이미지 previewer 클래스들의 배열을 허용합니다. 기본값으로 다음과 같이 정의되어 있습니다:

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

ActiveStorage에서 사용할 previewer들을 각각 순서대로 지정합니다.

PopplerPDFPreviewerMuPDFPreviewer는 PDF blob의 첫 페이지로부터 썸네일을 생성할 수 있고, VideoPreviewer는 비디오 blob의 관련 프레임으로부터 썸네일을 생성할 수 있습니다.

3.17.4 config.active_storage.paths

previewer/analyzer 명령어의 위치를 나타내는 옵션 해시를 받습니다. 기본값은 {}이며, 이는 명령어들이 기본 경로에서 검색될 것임을 의미합니다. 다음과 같은 옵션들을 포함할 수 있습니다:

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

3.17.5 config.active_storage.variable_content_types

Active Storage가 variant processor를 통해 변환할 수 있는 content type을 나타내는 문자열 배열을 받습니다. 기본값은 다음과 같이 정의되어 있습니다:

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)

3.17.6 config.active_storage.web_image_content_types

fallback PNG 형식으로 변환하지 않고도 variants를 처리할 수 있는 웹 이미지 content type들의 문자열 배열을 받습니다. 예를 들어, 애플리케이션에서 AVIF variants를 사용하고 싶다면 이 배열에 image/avif를 추가할 수 있습니다.

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

시작 버전 기본값
(original) %w(image/png image/jpeg image/gif)
7.2 %w(image/png image/jpeg image/gif image/webp)

3.17.7 config.active_storage.content_types_to_serve_as_binary

Active Storage가 inline이 아닌 attachment로 항상 제공할 content type들을 나타내는 문자열 배열을 받습니다. 기본적으로 다음과 같이 정의됩니다:

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)

이진 파일로 처리될 content type들의 목록을 지정합니다. 기본적으로 text/html, image/svg+xml, application/postscript, application/x-shockwave-flash, text/xml, application/xml, application/xhtml+xml, application/mathml+xml 그리고 text/cache-manifest가 포함됩니다.

3.17.8 config.active_storage.content_types_allowed_inline

문자열 배열을 받아서 Active Storage가 inline으로 제공할 수 있는 content type을 지정합니다. 기본값은 다음과 같습니다:

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)

인라인으로 표시가 허용된 content type 목록입니다.

3.17.9 config.active_storage.queues.analysis

분석 작업에 사용할 Active Job queue를 나타내는 symbol을 받습니다. 이 옵션이 nil이면 분석 작업은 기본 Active Job queue로 전송됩니다 (참조: config.active_job.default_queue_name).

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

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

3.17.10 config.active_storage.queues.mirror

직접 업로드 미러링 작업에 사용할 Active Job queue를 나타내는 symbol을 받습니다. 이 옵션이 nil이면 미러링 작업은 기본 Active Job queue로 전송됩니다 (참조: config.active_job.default_queue_name). 기본값은 nil입니다.

3.17.11 config.active_storage.queues.preview_image

이미지 미리보기 전처리에 사용할 Active Job queue를 나타내는 symbol을 받습니다. 이 옵션이 nil이면 작업은 기본 Active Job queue로 전송됩니다 (참조: config.active_job.default_queue_name). 기본값은 nil입니다.

3.17.12 config.active_storage.queues.purge

제거 작업에 사용할 Active Job queue를 나타내는 symbol을 받습니다. 이 옵션이 nil이면 제거 작업은 기본 Active Job queue로 전송됩니다 (참조: config.active_job.default_queue_name).

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

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

3.17.13 config.active_storage.queues.transform

variant 전처리에 사용할 Active Job queue를 나타내는 symbol을 받습니다. 이 옵션이 nil이면 작업은 기본 Active Job queue로 전송됩니다 (참조: config.active_job.default_queue_name). 기본값은 nil입니다.

3.17.14 config.active_storage.logger

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

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

3.17.15 config.active_storage.service_urls_expire_in

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

기본값은 5분입니다.

3.17.16 config.active_storage.urls_expire_in

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

3.17.17 config.active_storage.touch_attachment_records

업데이트될 때 ActiveStorage::Attachments가 해당하는 레코드를 touch하도록 지시합니다. 기본값은 true입니다.

3.17.18 config.active_storage.routes_prefix

Active Storage가 제공하는 라우트의 prefix를 설정하는 데 사용할 수 있습니다. 생성된 라우트 앞에 추가될 문자열을 받습니다.

config.active_storage.routes_prefix = "/files"

Active Storage URL의 prefix를 "/files"로 설정하여 /rails/active_storage/blobs/:signed_id/*filename/files/blobs/:signed_id/*filename이 되도록 합니다.

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

3.17.19 config.active_storage.track_variants

데이터베이스에 variants를 기록할지 여부를 결정합니다.

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

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

3.17.20 config.active_storage.draw_routes

Active Storage 라우트 생성을 토글하는 데 사용할 수 있습니다. 기본값은 true입니다.

3.17.21 config.active_storage.resolve_model_to_route

Active Storage 파일이 전달되는 방식을 전역적으로 변경하는 데 사용할 수 있습니다.

허용되는 값:

  • :rails_storage_redirect: 서명된 단기 서비스 URL로 리다이렉트
  • :rails_storage_proxy: 파일을 다운로드하여 프록시

기본값은 :rails_storage_redirect입니다.

3.17.22 config.active_storage.video_preview_arguments

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

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

시작 버전 기본값
(original) "-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. 다른 프레임이 기준을 충족하지 않을 때 첫 번째 비디오 프레임을 대체로 사용하기 위해 첫 번째(또는 두 개의) 선택된 프레임을 반복한 다음 첫 번째 반복 프레임을 삭제합니다.

3.17.23 config.active_storage.multiple_file_field_include_hidden

Rails 7.1 이상에서는 Active Storage has_many_attached 관계가 현재 컬렉션에 추가하는 대신 대체하는 것을 기본값으로 합니다. 따라서 컬렉션 제출을 지원하기 위해 multiple_file_field_include_hiddentrue일 때, file_field 헬퍼는 checkbox 헬퍼가 렌더링하는 보조 hidden 필드와 유사한 보조 hidden 필드를 렌더링합니다.

기본값은 config.load_defaults target 버전에 따라 달라집니다:

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

3.17.24 config.active_storage.precompile_assets

Active Storage 에셋들을 에셋 파이프라인 프리컴파일에 추가할지 여부를 결정합니다. Sprockets가 사용되지 않는 경우에는 아무런 효과가 없습니다. 기본값은 true입니다.

3.18 Action Text 구성하기

3.18.1 config.action_text.attachment_tag_name

첨부 파일을 감싸는 HTML 태그로 사용될 문자열을 받습니다. 기본값은 "action-text-attachment"입니다.

3.18.2 config.action_text.sanitizer_vendor

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

시작 버전 기본값 마크업 파싱 방식
(original) Rails::HTML4::Sanitizer HTML4
7.1 Rails::HTML5::Sanitizer (주의사항 참고) HTML5

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

3.18.3 Regexp.timeout

Ruby의 Regexp.timeout= 문서를 참조하세요.

3.19 데이터베이스 설정하기

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

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

development:
  adapter: postgresql
  database: blog_development
  pool: 5

이것은 postgresql adapter를 사용하여 blog_development라는 이름의 데이터베이스에 연결합니다. 동일한 정보는 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 코드로 평가됩니다. 이를 통해 환경 변수에서 데이터를 가져오거나 필요한 연결 정보를 생성하기 위한 계산을 수행할 수 있습니다.

config/database.yml 파일에서 ENV['DATABASE_URL'] 또는 url 키를 사용할 때, Rails는 URL의 protocol을 애플리케이션 내에서 구성할 수 있는 database adapter에 매핑할 수 있게 해줍니다. 이를 통해 배포 환경에 설정된 URL을 수정하지 않고도 adapter를 구성할 수 있습니다. 참조: config.active_record.protocol_adapters.

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

3.20 Connection Preference

연결을 설정하는 방법에는 두 가지(config/database.yml 사용 또는 environment variable 사용)가 있으므로 이들이 어떻게 상호작용하는지 이해하는 것이 중요합니다.

만약 config/database.yml 파일이 비어있고 ENV['DATABASE_URL']이 존재한다면, Rails는 environment variable을 통해 데이터베이스에 연결할 것입니다:

$ cat config/database.yml

$ echo $DATABASE_URL
postgresql://localhost/my_database

config/database.yml은 있지만 ENV['DATABASE_URL']이 없는 경우, 이 파일이 데이터베이스 연결에 사용됩니다:

$ cat config/database.yml
development:
  adapter: postgresql
  database: 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">
  ]

위 예시는 DATABASE_URLconfig/database.yml 파일의 설정을 어떻게 재정의하는지 보여줍니다.

여기서 adapter, host, database는 ENV['DATABASE_URL']의 정보와 일치합니다.

중복되지 않는 정보가 제공되면 모든 고유한 값을 얻게 되며, 충돌이 발생하는 경우에는 environment variable이 우선됩니다.

$ 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']의 연결 정보는 무시되며, adapter와 database 이름이 다릅니다.

config/database.yml에 ERB를 포함할 수 있기 때문에, 데이터베이스 연결에 ENV['DATABASE_URL']을 사용한다는 것을 명시적으로 보여주는 것이 best practice입니다. 이는 특히 production 환경에서 유용한데, 데이터베이스 비밀번호와 같은 secrets를 source control(예: Git)에 커밋하면 안 되기 때문입니다.

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

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

3.20.1 SQLite3 데이터베이스 구성하기

Rails는 경량 서버리스 데이터베이스 애플리케이션인 SQLite3에 대한 내장 지원을 제공합니다. Rails가 SQLite를 production 워크로드에 더 잘 구성하긴 하지만, 사용량이 많은 production 환경에서는 SQLite가 과부하될 수 있습니다. Rails는 새 프로젝트를 생성할 때 기본적으로 SQLite 데이터베이스를 사용하도록 설정되어 있지만, 이는 나중에 언제든 변경할 수 있습니다.

다음은 development 환경을 위한 연결 정보가 담긴 기본 설정 파일(config/database.yml)의 일부입니다:

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

Rails는 기본적으로 데이터 저장을 위해 SQLite3 데이터베이스를 사용합니다. SQLite3는 별도의 설정 없이도 바로 동작하기 때문입니다. Rails는 또한 MySQL(MariaDB 포함)과 PostgreSQL을 "즉시" 지원하며, 많은 데이터베이스 시스템을 위한 플러그인을 가지고 있습니다. 만약 프로덕션 환경에서 데이터베이스를 사용하고 있다면 Rails는 대부분 해당 데이터베이스용 adapter를 가지고 있을 것입니다.

3.20.2 MySQL 또는 MariaDB 데이터베이스 설정하기

기본으로 제공되는 SQLite3 데이터베이스 대신 MySQL이나 MariaDB를 사용하기로 선택했다면, config/database.yml은 조금 다르게 보일 것입니다. 다음은 development 섹션의 예시입니다:

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

개발용 데이터베이스에 비밀번호가 없는 root 사용자가 있다면, 이 설정이 동작할 것입니다. 그렇지 않다면, development 섹션의 username과 password를 적절하게 변경하세요.

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

Advisory Locks는 MySQL에서 기본적으로 활성화되어 있으며 데이터베이스 마이그레이션을 동시에 안전하게 수행하는 데 사용됩니다. advisory_locksfalse로 설정하여 advisory locks를 비활성화할 수 있습니다:

production:
  adapter: mysql2
  advisory_locks: false

production 환경에서는 mysql2를 adapter로 사용하고, advisory_locks 기능을 비활성화합니다.

3.20.3 PostgreSQL 데이터베이스 설정하기

PostgreSQL을 사용하기로 선택한 경우, PostgreSQL 데이터베이스를 사용하도록 config/database.yml이 맞춤 설정될 것입니다:

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

기본적으로 Active Record는 prepared statements와 advisory locks 같은 데이터베이스 기능을 사용합니다. PgBouncer와 같은 외부 connection pooler를 사용하는 경우 이러한 기능들을 비활성화해야 할 수 있습니다:

production:
  adapter: postgresql
  prepared_statements: false  
  advisory_locks: false

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

production:
  adapter: postgresql
  statement_limit: 200

사용중인 prepared statements가 많을수록 데이터베이스에 필요한 메모리가 증가합니다. PostgreSQL 데이터베이스가 메모리 한계에 도달한다면 statement_limit을 낮추거나 prepared statements를 비활성화해보세요.

3.20.4 JRuby Platform에서 SQLite3 데이터베이스 구성하기

SQLite3를 선택하고 JRuby를 사용하는 경우, config/database.yml이 약간 다르게 보일 것입니다. 다음은 development 섹션입니다:

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

3.20.5 JRuby Platform을 위한 MySQL 또는 MariaDB Database 설정하기

MySQL이나 MariaDB를 선택했고 JRuby를 사용중이라면, config/database.yml는 약간 다르게 보일 것입니다. 다음은 development 섹션입니다:

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

3.20.6 JRuby 플랫폼을 위한 PostgreSQL 데이터베이스 설정하기

PostgreSQL을 선택하고 JRuby를 사용하는 경우, config/database.yml 파일이 조금 다르게 보일 것입니다. 다음은 development 섹션입니다:

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

development 섹션에서 username과 password를 적절하게 변경하세요.

3.20.7 Metadata Storage 설정하기

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

각 연결마다 이 기능을 끄려면 데이터베이스 설정에서 use_metadata_table을 설정하세요. 이는 공유 데이터베이스나 테이블을 생성할 수 없는 데이터베이스 사용자와 작업할 때 유용합니다.

development:
  adapter: postgresql
  use_metadata_table: false

3.20.8 Retry 동작 구성하기

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

development:
  adapter: mysql2
  connection_retries: 3

데이터베이스 설정에서는 retry_deadline도 설정할 수 있습니다. retry_deadline이 설정되면, 재시도가 가능한 쿼리라도 처음 시도된 후 지정된 시간이 경과한 경우에는 재시도되지 않습니다. 예를 들어, retry_deadline이 5초로 설정된 경우, 쿼리가 처음 시도된 후 5초가 경과했다면 그 쿼리가 멱등성을 가지고 있고 connection_retries가 남아있더라도 재시도하지 않습니다.

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

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

3.20.9 Query Cache 설정하기

기본적으로 Rails는 쿼리에 의해 반환된 결과 집합들을 자동으로 캐시합니다. Rails가 동일한 요청이나 job에서 같은 쿼리를 다시 만나면, 데이터베이스에 대해 쿼리를 다시 실행하는 대신 캐시된 결과 집합을 사용합니다.

query cache는 메모리에 저장되며, 너무 많은 메모리를 사용하지 않도록 임계값에 도달하면 가장 최근에 사용되지 않은 쿼리를 자동으로 제거합니다. 기본적으로 임계값은 100이지만, database.yml에서 설정할 수 있습니다.

development:
  adapter: mysql2
  query_cache: 200

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

development:
  adapter: mysql2
  query_cache: false

3.21 Rails 환경 생성하기

기본적으로 Rails는 "development", "test", "production" 세 가지 환경과 함께 제공됩니다. 이 환경들이 대부분의 사용 사례에 충분하지만, 더 많은 환경이 필요한 경우가 있습니다.

프로덕션 환경을 미러링하지만 테스트용으로만 사용되는 서버가 있다고 상상해보세요. 이러한 서버를 일반적으로 "staging server"라고 합니다. 이 서버를 위한 "staging" 환경을 정의하려면 config/environments/staging.rb 파일을 생성하면 됩니다. 이는 프로덕션과 유사한 환경이므로, config/environments/production.rb의 내용을 복사해서 시작점으로 삼고 거기서 필요한 변경을 할 수 있습니다. 다른 환경 설정을 다음과 같이 require하고 확장하는 것도 가능합니다:

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

Rails.application.configure do 
  # Staging 환경용 재정의
end

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

3.22 서브디렉터리에 배포하기 (relative URL root)

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

우리의 애플리케이션을 "/app1"에 배포하고 싶다고 가정해봅시다. Rails는 적절한 route를 생성하기 위해 이 디렉터리를 알아야 합니다:

config.relative_url_root = "/app1"

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

이제 Rails는 링크를 생성할 때 "/app1"을 앞에 추가할 것입니다.

3.22.1 Passenger 사용하기

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

3.22.2 Reverse Proxy 사용하기

Reverse proxy를 사용하여 애플리케이션을 배포하는 것은 전통적인 배포 방식보다 확실한 장점이 있습니다. 애플리케이션에 필요한 컴포넌트를 계층화하여 서버를 더 잘 제어할 수 있게 해줍니다.

많은 최신 웹 서버들은 캐싱 서버나 애플리케이션 서버와 같은 써드파티 요소들의 밸런싱을 위한 프록시 서버로 사용될 수 있습니다.

사용할 수 있는 그러한 애플리케이션 서버 중 하나는 reverse proxy 뒤에서 실행되는 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 documentation을 반드시 읽어보세요.

4 Rails 환경 설정

Rails의 일부 설정은 환경 변수를 통해 외부에서 구성할 수 있습니다. 다음 환경 변수들은 Rails의 여러 부분에서 인식됩니다:

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

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

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

5 Initializer 파일 사용하기

프레임워크와 애플리케이션의 모든 gem을 로드한 후, Rails는 initializer 로딩을 시작합니다. Initializer는 애플리케이션의 config/initializers 디렉토리에 저장된 모든 Ruby 파일입니다. Initializer를 사용하여 모든 프레임워크와 gem이 로드된 후에 설정되어야 하는 구성 설정을 저장할 수 있습니다.

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

initializer가 다른 initializer의 코드에 의존하는 경우, 이들을 하나의 initializer로 결합할 수 있습니다. 이렇게 하면 의존성이 더 명시적이 되고 애플리케이션 내의 새로운 개념을 표면화하는 데 도움이 될 수 있습니다. Rails는 initializer 파일 이름의 번호 매기기도 지원하지만, 이는 파일 이름 변경을 초래할 수 있습니다. require를 사용하여 initializer를 명시적으로 로드하는 것은 권장되지 않습니다. initializer가 두 번 로드될 수 있기 때문입니다.

initializer가 모든 gem initializer 이후에 실행된다는 보장은 없으므로, 특정 gem이 초기화된 후에 실행되어야 하는 초기화 코드는 config.after_initialize 블록 안에 넣어야 합니다.

6 Load Hooks

Rails 코드는 종종 애플리케이션 로드 시에 참조될 수 있습니다. Rails는 이러한 프레임워크들의 로드 순서를 담당하므로, ActiveRecord::Base와 같은 프레임워크를 미리 로드하면 Rails와의 암묵적 계약을 위반하게 됩니다. 더욱이 애플리케이션 부팅 시에 ActiveRecord::Base와 같은 코드를 로드하면 전체 프레임워크가 로드되어 부팅 시간이 느려지고 로드 순서와 애플리케이션 부팅에 충돌이 발생할 수 있습니다.

Load와 configuration hook은 Rails와의 로드 계약을 위반하지 않고 이 초기화 프로세스에 연결할 수 있게 해주는 API입니다. 이는 또한 부팅 성능 저하를 완화하고 충돌을 피할 수 있게 해줍니다.

6.1 Rails 프레임워크 로딩 피하기

Ruby는 동적 언어이므로, 일부 코드는 다른 Rails 프레임워크를 로드하게 됩니다. 예를 들어 다음과 같은 코드 조각을 보겠습니다:

ActiveRecord::Base.include(MyActiveRecordHelper)

이 코드 조각은 이 파일이 로드될 때 ActiveRecord::Base를 만나게 된다는 것을 의미합니다. 이러한 조우로 인해 Ruby는 해당 상수의 정의를 찾아 require하게 됩니다. 이로 인해 부팅 시 전체 Active Record 프레임워크가 로드됩니다.

ActiveSupport.on_load는 실제로 필요할 때까지 코드 로딩을 지연시키는 데 사용할 수 있는 메커니즘입니다. 위의 코드 조각은 다음과 같이 변경될 수 있습니다:

ActiveSupport.on_load(:active_record) ActiveRecord가 로드될  MyActiveRecordHelper를 포함하도록 지정합니다.

이 새로운 코드 조각은 ActiveRecord::Base가 로드될 때만 MyActiveRecordHelper를 포함할 것입니다.

6.2 Hook은 언제 호출되나요?

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

6.3 Load Hooks를 사용하도록 코드 수정하기

코드를 수정하는 것은 일반적으로 간단합니다. ActiveRecord::Base와 같은 Rails 프레임워크를 참조하는 코드가 있다면 해당 코드를 load hook으로 감쌀 수 있습니다.

include 호출 수정하기

ActiveRecord::Base.include(MyActiveRecordHelper)

becomes

becomes 메소드는 레코드의 becomes 메소드는 주어진 클래스의 새로운 객체로 해당 레코드를 변환할 수 있게 합니다. 이는 STI(Single Table Inheritance)를 사용할 때 레코드를 다른 타입으로 변환하는데 특히 유용합니다.

account = Account.first
company = account.becomes(Company) # => Company 인스턴스 반환
company.new_record?               # => false

becomes! 메소드도 사용할 수 있는데, 이는 객체를 바로 변경합니다.

account = Account.first
account.becomes!(Company)
account.class # => Company 인스턴스가 됨

becomesbecomes! 메소드는 원래 모델의 속성들을 새로운 모델로 모두 복사합니다. 이 프로세스는 모델들이 모든 같은 속성을 공유한다고 가정합니다.

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

prepend 호출 수정하기

ActionController::Base.prepend(MyActionControllerHelper)

becomes

becomes 메서드는 객체의 내부 형태를 다른 객체나 클래스로 변경합니다. 이는 새로운 객체를 생성하지 않고 본질적으로 객체를 직접 변경합니다.

user = User.find_by(id: 1)
user.becomes(SuperUser)

object.becomes 함수는 다음과 같은 상황에서 유용합니다:

  • 거의 동일한 모델의 STI(Single Table Inheritance) 계층에서 이동할 때
  • 모델의 모든 속성을 유지하면서 확장된 기능과 API를 가진 decorator 모델로 전환할 때

주의: 원본 객체의 속성은 보존되지만, changed_attributes와 같은 이력 관련 정보는 초기화됩니다.

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

클래스 메서드 호출 수정하기

ActiveRecord::Base.include_root_in_json = true

JSON 표현에 root 요소를 포함할지 여부를 설정합니다.

becomes

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

6.4 사용 가능한 Load Hook

다음은 여러분의 코드에서 사용할 수 있는 load hook들입니다. 다음 클래스들의 초기화 프로세스에 hook을 걸려면 사용 가능한 hook을 사용하세요.

Class Hook
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
ActionText::RichText action_text_rich_text
ActionText::EncryptedRichText action_text_encrypted_rich_text
ActionView::Base action_view
ActionView::TestCase action_view_test_case
ActiveJob::Base active_job
ActiveJob::TestCase active_job_test_case
ActiveModel::Model active_model
ActiveModel::Translation active_model_translation
ActiveRecord::Base active_record
ActiveRecord::Encryption active_record_encryption
ActiveRecord::TestFixtures active_record_fixtures
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter active_record_postgresqladapter
ActiveRecord::ConnectionAdapters::Mysql2Adapter active_record_mysql2adapter
ActiveRecord::ConnectionAdapters::TrilogyAdapter active_record_trilogyadapter
ActiveRecord::ConnectionAdapters::SQLite3Adapter active_record_sqlite3adapter
ActiveStorage::Attachment active_storage_attachment
ActiveStorage::VariantRecord active_storage_variant_record
ActiveStorage::Blob active_storage_blob
ActiveStorage::Record active_storage_record
ActiveSupport::TestCase active_support_test_case
i18n i18n

초기화 이벤트

Rails는 다음 5개의 초기화 이벤트에 연결할 수 있습니다(실행되는 순서대로 나열):

  • before_configuration: config/application.rb에서 애플리케이션 클래스가 Rails::Application을 상속할 때 실행됩니다. 클래스 본문이 실행되기 전에 실행됩니다. Engine은 애플리케이션 자체가 구성되기 전에 코드를 실행하기 위해 이 hook을 사용할 수 있습니다.

  • before_initialize: Rails 초기화 프로세스 초기에 있는 :bootstrap_hook initializer로 애플리케이션의 초기화 프로세스가 발생하기 직전에 실행됩니다.

  • to_prepare: 모든 Railties(애플리케이션 자체 포함)에 대한 initializer가 실행되고 middleware 스택이 구축된 후에 실행되지만, eager loading 전에 실행됩니다. 더 중요한 것은, development에서는 코드가 다시 로드될 때마다 실행되지만, productiontest에서는 (부팅 시) 한 번만 실행됩니다.

  • before_eager_load: production 환경에서는 기본 동작이지만 development 환경에서는 아닌 eager loading이 발생하기 직전에 실행됩니다.

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

이러한 hook에 대한 이벤트를 정의하려면 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 블록이 호출되는 시점에서는 routing과 같은 애플리케이션의 일부 기능이 아직 설정되어 있지 않습니다.

6.5 Rails::Railtie#initializer

Rails는 시작 시 실행되는 여러 initializer들을 가지고 있으며, 이들은 모두 Rails::Railtieinitializer 메서드를 사용하여 정의됩니다. 다음은 Action Controller의 set_helpers_path initializer의 예시입니다:

initializer "action_controller.set_helpers_path" |app| 통해
ActionController::Helpers의 helpers_path를 app.helpers_paths로 설정합니다

initializer 메서드는 세 개의 인수를 받으며, 첫 번째는 initializer의 이름, 두 번째는 옵션 해시(여기서는 표시되지 않음), 세 번째는 블록입니다. 옵션 해시의 :before 키는 이 새로운 initializer가 어떤 initializer 이전에 실행되어야 하는지를, :after 키는 이 initializer가 어떤 initializer 이후에 실행되어야 하는지를 지정하는 데 사용됩니다.

initializer 메서드를 사용하여 정의된 initializer들은 :before 또는 :after 메서드를 사용하는 경우를 제외하고는 정의된 순서대로 실행됩니다.

논리적으로 타당한 한, 체인 내의 다른 어떤 initializer 이전이나 이후에 initializer를 배치할 수 있습니다. 예를 들어 "one"부터 "four"까지 4개의 initializer가 있고(해당 순서로 정의됨) "four"가 "two" 이전에 실행되지만 "three" 이후에 실행되도록 정의한다면, 이는 논리적이지 않으며 Rails는 initializer 순서를 결정할 수 없게 됩니다.

initializer 메서드의 블록 인수는 애플리케이션 자체의 인스턴스이므로, 예제에서처럼 config 메서드를 사용하여 설정에 접근할 수 있습니다.

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

6.6 Initializers

다음은 Rails에서 정의된(그리고 별도로 명시되지 않는 한 실행되는) 모든 initializer의 포괄적인 목록입니다.

  • load_environment_hook: :load_environment_config가 그 전에 실행되도록 정의될 수 있게 하는 placeholder 역할을 합니다.

  • load_active_support: Active Support의 기반을 설정하는 active_support/dependencies를 require합니다. 기본값인 config.active_support.bare가 거짓이면 선택적으로 active_support/all을 require합니다.

  • initialize_logger: 애플리케이션의 logger(ActiveSupport::BroadcastLogger 객체)를 초기화하고 이 시점 이전에 삽입된 initializer가 Rails.logger를 정의하지 않은 경우 Rails.logger로 접근 가능하게 합니다.

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

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

  • bootstrap_hook: 설정된 모든 before_initialize 블록을 실행합니다.

  • i18n.callbacks: 개발 환경에서는 마지막 요청 이후 로케일이 변경된 경우 I18n.reload!를 호출하는 to_prepare 콜백을 설정합니다. 프로덕션 환경에서는 이 콜백이 첫 번째 요청에서만 실행됩니다.

  • active_support.deprecation_behavior: config.active_support.report_deprecations, config.active_support.deprecation, config.active_support.disallowed_deprecation, config.active_support.disallowed_deprecation_warnings를 기반으로 Rails.application.deprecators에 대한 deprecation 리포팅 동작을 설정합니다.

  • active_support.initialize_time_zone: 기본값이 "UTC"인 config.time_zone 설정을 기반으로 애플리케이션의 기본 시간대를 설정합니다.

  • active_support.initialize_beginning_of_week: 기본값이 :mondayconfig.beginning_of_week 설정을 기반으로 애플리케이션의 기본 주 시작일을 설정합니다.

  • active_support.set_configs: config.active_support의 설정을 사용하여 메서드 이름을 setter로 ActiveSupportsend하고 값을 전달하여 Active Support를 설정합니다.

  • action_dispatch.configure: ActionDispatch::Http::URL.tld_lengthconfig.action_dispatch.tld_length 값으로 설정하도록 구성합니다.

  • action_view.set_configs: config.action_view의 설정을 사용하여 메서드 이름을 setter로 ActionView::Basesend하고 값을 전달하여 Action View를 설정합니다.

  • action_controller.assets_config: 명시적으로 구성되지 않은 경우 config.action_controller.assets_dir을 앱의 public 디렉토리로 초기화합니다.

  • action_controller.set_helpers_path: Action Controller의 helpers_path를 애플리케이션의 helpers_path로 설정합니다.

  • action_controller.parameters_config: ActionController::Parameters의 strong parameters 옵션을 구성합니다.

  • action_controller.set_configs: config.action_controller의 설정을 사용하여 메서드 이름을 setter로 ActionController::Basesend하고 값을 전달하여 Action Controller를 설정합니다.

  • 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.loggerRails.logger로 설정합니다.

  • active_record.migration_error: 대기 중인 migration을 확인하기 위한 middleware를 구성합니다.

  • active_record.check_schema_cache_dump: 구성되어 있고 사용 가능한 경우 schema cache dump를 로드합니다.

  • active_record.set_configs: config.active_record의 설정을 사용하여 메서드 이름을 setter로 ActiveRecord::Basesend하고 값을 전달하여 Active Record를 설정합니다.

  • active_record.initialize_database: 기본적으로 config/database.yml에서 데이터베이스 설정을 로드하고 현재 환경에 대한 연결을 설정합니다.

  • active_record.log_runtime: Active Record 호출이 요청에 걸린 시간을 logger에 보고하는 역할을 하는 ActiveRecord::Railties::ControllerRuntimeActiveRecord::Railties::JobRuntime을 포함합니다.

  • active_record.set_reloader_hooks: config.enable_reloadingtrue로 설정된 경우 데이터베이스에 대한 모든 재로드 가능한 연결을 재설정합니다.

  • active_record.add_watchable_files: schema.rbstructure.sql 파일을 감시 가능한 파일에 추가합니다.

  • active_job.logger: 아직 설정되지 않은 경우 ActiveJob::Base.loggerRails.logger로 설정합니다.

  • active_job.set_configs: config.active_job의 설정을 사용하여 Active Job을 설정합니다. 메서드 이름을 ActiveJob::Base에 setter로 send하고 값을 전달합니다.

  • action_mailer.logger: 아직 설정되지 않은 경우 ActionMailer::Base.loggerRails.logger로 설정합니다.

  • action_mailer.set_configs: config.action_mailer의 설정을 사용하여 Action Mailer를 설정합니다. 메서드 이름을 ActionMailer::Base에 setter로 send하고 값을 전달합니다.

  • 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에 지정된 모든 autoload 경로도 추가합니다.

  • set_autoload_paths: 이 초기화는 bootstrap_hook 이전에 실행됩니다. app의 모든 하위 디렉토리와 config.autoload_paths, config.eager_load_paths, config.autoload_once_paths에 지정된 경로를 ActiveSupport::Dependencies.autoload_paths에 추가합니다.

  • add_routing_paths: (기본적으로) 애플리케이션과 railties(엔진 포함)의 모든 config/routes.rb 파일을 로드하고 애플리케이션의 라우트를 설정합니다.

  • add_locales: 애플리케이션, railties, 엔진의 config/locales 파일들을 I18n.load_path에 추가하여 이 파일들의 번역을 사용할 수 있게 합니다.

  • add_view_paths: 애플리케이션, railties, 엔진의 app/views 디렉토리를 애플리케이션의 뷰 파일 검색 경로에 추가합니다.

  • add_mailer_preview_paths: 애플리케이션, railties, 엔진의 test/mailers/previews 디렉토리를 애플리케이션의 메일러 미리보기 파일 검색 경로에 추가합니다.

  • load_environment_config: 이 초기화는 load_environment_hook 이전에 실행됩니다. 현재 환경에 대한 config/environments 파일을 로드합니다.

  • prepend_helpers_path: 애플리케이션, railties, 엔진의 app/helpers 디렉토리를 애플리케이션의 헬퍼 검색 경로에 추가합니다.

  • load_config_initializers: 애플리케이션, railties, 엔진의 config/initializers에 있는 모든 Ruby 파일을 로드합니다. 이 디렉토리의 파일들은 모든 프레임워크가 로드된 후에 적용되어야 하는 설정을 보관하는 데 사용할 수 있습니다.

  • engines_blank_point: 엔진이 로드되기 전에 무언가를 수행하고 싶을 때 연결할 수 있는 초기화 시점을 제공합니다. 이 시점 이후에는 모든 railtie와 엔진 초기화가 실행됩니다.

  • add_generator_templates: 애플리케이션, railties, 엔진의 lib/templates에서 generator 템플릿을 찾아 config.generators.templates 설정에 추가합니다. 이를 통해 모든 generator가 템플릿을 참조할 수 있게 됩니다.

  • ensure_autoload_once_paths_as_subset: config.autoload_once_pathsconfig.autoload_paths의 경로만 포함하도록 보장합니다. 추가 경로가 포함되어 있으면 예외가 발생합니다.

  • add_to_prepare_blocks: 애플리케이션, railtie, 또는 엔진의 모든 config.to_prepare 호출에 대한 블록이 Action Dispatch의 to_prepare 콜백에 추가됩니다. 이는 개발 환경에서는 요청마다 실행되고, 프로덕션 환경에서는 첫 번째 요청 전에 실행됩니다.

  • add_builtin_route: 애플리케이션이 개발 환경에서 실행 중인 경우, rails/info/properties에 대한 라우트를 애플리케이션 라우트에 추가합니다. 이 라우트는 기본 Rails 애플리케이션의 public/index.html에 Rails와 Ruby 버전과 같은 상세 정보를 제공합니다.

  • build_middleware_stack: 애플리케이션의 middleware 스택을 빌드하고, Rack 환경 객체를 요청의 매개변수로 받는 call 메서드를 가진 객체를 반환합니다.

  • eager_load!: config.eager_loadtrue이면, config.before_eager_load 훅을 실행하고 모든 config.eager_load_namespaces를 로드하는 eager_load!를 호출합니다.

  • finisher_hook: 애플리케이션의 초기화 프로세스가 완료된 후의 훅을 제공하며, 애플리케이션, railties, 엔진에 대한 모든 config.after_initialize 블록을 실행합니다.

  • set_routes_reloader_hook: Action Dispatch가 ActiveSupport::Callbacks.to_run을 사용하여 routes 파일을 다시 로드하도록 설정합니다.

  • disable_dependency_loading: config.eager_loadtrue로 설정된 경우 자동 의존성 로딩을 비활성화합니다.

7 Database Pooling

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는 작업을 차단하고 풀에서 연결을 기다립니다. 연결을 가져올 수 없는 경우, 아래와 같은 timeout 에러가 발생합니다.

ActiveRecord::ConnectionTimeoutError - 5.000초 이내에 데이터베이스 연결을 얻을 수 없습니다 (5.000초 대기함)

위와 같은 오류가 발생하면 database.ymlpool 옵션을 늘려서 connection pool의 크기를 증가시킬 수 있습니다.

멀티스레드 환경에서 실행 중인 경우, 여러 스레드가 동시에 여러 connection에 액세스할 가능성이 있습니다. 따라서 현재 요청 부하에 따라 제한된 수의 connection을 여러 스레드가 경합할 수 있습니다.

8 Custom Configuration

Rails configuration 객체를 통해 config.x 네임스페이스 또는 config 직접 사용하여 사용자 정의 설정을 구성할 수 있습니다. 이 둘의 주요 차이점은 중첩된 설정(예: config.x.nested.hi)을 정의하는 경우 config.x를 사용해야 하고, 단일 레벨 설정(예: config.hello)의 경우 config를 직접 사용해야 한다는 것입니다.

config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries  = 3  
config.super_debugger = true

위와 같은 custom configuration 은 코드 어디에서나 사용할 수 있습니다:

이러한 설정 항목들은 configuration 객체를 통해 사용할 수 있습니다:

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를 사용하여 전체 configuration 파일을 로드할 수도 있습니다:

# 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 또는 development_merchant_id

Rails::Application.config_for는 공통 설정을 그룹화하기 위한 shared 설정을 지원합니다. shared 설정은 environment 설정에 병합됩니다.

# 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 }

9 검색 엔진 인덱싱

때때로 Google, Bing, Yahoo나 Duck Duck Go와 같은 검색 사이트에서 애플리케이션의 일부 페이지가 보이지 않게 하고 싶을 수 있습니다. 이러한 사이트를 인덱싱하는 로봇들은 먼저 http://your-site.com/robots.txt 파일을 분석하여 어떤 페이지를 인덱싱할 수 있는지 확인합니다.

Rails는 /public 폴더 안에 이 파일을 자동으로 생성합니다. 기본적으로 검색 엔진이 애플리케이션의 모든 페이지를 인덱싱할 수 있도록 허용합니다. 애플리케이션의 모든 페이지에서 인덱싱을 차단하려면 다음과 같이 사용하세요:

User-agent: *
Disallow: /

특정 페이지들만 차단하려면 좀 더 복잡한 구문이 필요합니다. 공식 문서에서 배워보세요.



맨 위로