Это руководство раскрывает особенности конфигурирования и инициализации, доступные приложениям на Rails.
После прочтения этого руководства, вы узнаете:
Rails предлагает четыре стандартных места для размещения инициализационного кода:
В тех редких случаях, когда вашему приложению необходимо запустить некоторый код до того, как сам Rails загрузится, поместите его до вызова require "rails/all" в config/application.rb.
В целом, работа по конфигурированию Rails означает как настройку компонентов Rails, так и настройку самого Rails. Конфигурационный файл config/application.rb и конфигурационные файлы конкретных сред (такие как config/environments/production.rb) позволяют определить различные настройки, которые можно придать всем компонентам.
Например, можно добавить эту настройку в файл config/application.rb:
config.time_zone = 'Central Time (US & Canada)'
Это настройка для самого Rails. Если хотите передать настройки для отдельных компонентов Rails, это также осуществляется через объект config в config/application.rb:
config.active_record.schema_format = :ruby
Rails будет использовать эту конкретную настройку для конфигурирования Active Record.
Используйте публичные методы конфигурации, а не вызывайте на связанном классе. Т.е. Rails.application.config.action_mailer.options вместо ActionMailer::Base.options.
Если необходимо применить конфигурацию непосредственно на классе, используйте ленивый хук загрузки в инициализаторе, чтобы избежать автоматической загрузки класса до завершения инициализации. Это ломает приложение, так как автозагрузка в течение инициализации не может быть безопасно повторена при перезагрузке приложения.
config.load_defaults загружает конфигурационные значения для целевой и всех предыдущих версий. Например, config.load_defaults 6.1 загрузит значения по умолчанию для всех ранних версий и версии 6.1.
Ниже перечислены значения по умолчанию, связанные с каждой целевой версией. В случае конфликтующих значений, новый версии имеют приоритет над старыми версиями.
config.active_job.enqueue_after_transaction_commit: :default
config.active_record.automatically_invert_plural_associations: true
config.active_record.validate_migration_timestamps: true
config.active_storage.web_image_content_types: %w[image/png image/jpeg image/gif image/webp]
config.action_dispatch.debug_exception_log_level: :error
config.action_dispatch.default_headers: { "X-Frame-Options" => "SAMEORIGIN", "X-XSS-Protection" => "0", "X-Content-Type-Options" => "nosniff", "X-Permitted-Cross-Domain-Policies" => "none", "Referrer-Policy" => "strict-origin-when-cross-origin" }
config.action_text.sanitizer_vendor: Rails::HTML::Sanitizer.best_supported_vendor
config.action_view.sanitizer_vendor: Rails::HTML::Sanitizer.best_supported_vendor
config.active_record.before_committed_on_all_records: true
config.active_record.belongs_to_required_validates_foreign_key: false
config.active_record.default_column_serializer: nil
config.active_record.encryption.hash_digest_class: OpenSSL::Digest::SHA256
config.active_record.encryption.support_sha1_for_non_deterministic_encryption: false
config.active_record.generate_secure_token_on: :initialize
config.active_record.marshalling_format_version: 7.1
config.active_record.query_log_tags_format: :sqlcommenter
config.active_record.raise_on_assign_to_attr_readonly: true
config.active_record.run_after_transaction_callbacks_in_order_defined: true
config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction: false
config.active_record.sqlite3_adapter_strict_strings_by_default: true
config.active_support.cache_format_version: 7.1
config.active_support.message_serializer: :json_allow_marshal
config.active_support.raise_on_invalid_cache_expiration_time: true
config.active_support.use_message_serializer_for_metadata: true
config.add_autoload_paths_to_load_path: false
config.dom_testing_default_html_version: defined?(Nokogiri::HTML5) ? :html5 : :html4
config.log_file_size: 100 * 1024 * 1024
config.precompile_filter_parameters: true
config.action_controller.raise_on_open_redirects: true
config.action_controller.wrap_parameters_by_default: true
config.action_dispatch.cookies_serializer: :json
config.action_dispatch.default_headers: { "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" }
config.action_mailer.smtp_timeout: 5
config.action_view.apply_stylesheet_media_default: false
config.action_view.button_to_generates_button_tag: true
config.active_record.automatic_scope_inversing: true
config.active_record.partial_inserts: false
config.active_record.verify_foreign_keys_for_fixtures: true
config.active_storage.multiple_file_field_include_hidden: true
config.active_storage.variant_processor: :vips
config.active_storage.video_preview_arguments: "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"
config.active_support.cache_format_version: 7.0
config.active_support.executor_around_test_case: true
config.active_support.hash_digest_class: OpenSSL::Digest::SHA256
config.active_support.key_generator_hash_digest_class: OpenSSL::Digest::SHA256
ActiveSupport.utc_to_local_returns_utc_offset_times: true
config.action_dispatch.cookies_same_site_protection: :lax
config.action_dispatch.ssl_default_redirect_status: 308
config.action_mailbox.queues.incineration: nil
config.action_mailbox.queues.routing: nil
config.action_mailer.deliver_later_queue_name: nil
config.action_view.form_with_generates_remote_forms: false
config.action_view.preload_links_header: true
config.active_job.retry_jitter: 0.15
config.active_record.has_many_inversing: true
config.active_storage.queues.analysis: nil
config.active_storage.queues.purge: nil
config.active_storage.track_variants: true
config.action_dispatch.use_cookies_with_metadata: true
config.action_mailer.delivery_job: "ActionMailer::MailDeliveryJob"
config.action_view.default_enforce_utf8: false
config.active_record.collection_cache_versioning: true
config.active_storage.queues.analysis: :active_storage_analysis
config.active_storage.queues.purge: :active_storage_purge
config.action_controller.default_protect_from_forgery: true
config.action_dispatch.use_authenticated_cookie_encryption: true
config.action_view.form_with_generates_ids: true
config.active_record.cache_versioning: true
config.active_support.hash_digest_class: OpenSSL::Digest::SHA1
config.active_support.use_authenticated_message_encryption: true
config.action_view.form_with_generates_remote_forms: true
config.assets.unknown_asset_fallback: false
ActiveSupport.to_time_preserves_timezone: true
config.action_controller.forgery_protection_origin_check: true
config.action_controller.per_form_csrf_tokens: true
config.active_record.belongs_to_required_by_default: true
config.ssl_options: { hsts: { subdomains: true } }
Следующие конфигурационные методы вызываются на объекте Rails::Railtie, таком как подкласс Rails::Engine или Rails::Application.
config.add_autoload_paths_to_load_pathСообщает, должны ли пути автозагрузки быть добавлены в $LOAD_PATH. Рекомендуется установить его false в режиме :zeitwerk как можно раньше, в config/application.rb. Внутри Zeitwerk используются абсолютные пути, и приложения, запущенные в режиме :zeitwerk, не требуют require_dependency, поэтому модели, контроллеры, задания и т.д. не должны быть в $LOAD_PATH. Настройка false предотвращает Ruby от проверок этих директорий при разрешении вызовов require с относительными путями, и экономит работу Bootsnap и RAM, так как ему не нужно их индексировать.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 7.1 | false |
Этот флажок не влияет на директорию lib, она всегда добавляется в $LOAD_PATH.
config.after_initializeПринимает блок, который будет запущен после того, как Rails закончит инициализацию приложения. Это включает инициализацию самого фреймворка, engine-ов и всех инициализаторов приложения из config/initializers. Отметьте, что этот блок будет запущен для Rake задач. Полезно для конфигурирования настроек, установленных другими инициализаторами:
config.after_initialize do
ActionView::Base.sanitized_allowed_tags.delete 'div'
end
config.after_routes_loadedПринимает блок, который будет запущен после того, как Rails завершит загрузку маршрутов приложения. Этот блок будет также запущен всякий раз, когда маршруты перезагружаются.
config.after_routes_loaded do
# Код, который что-то делает с Rails.application.routes
end
config.allow_concurrencyКонтролирует, должны ли запросы обрабатываться параллельно. Она должна быть установлена false, если код приложения не является тредобезопасным. По умолчанию true.
config.asset_hostУстанавливает хост для ассетов. Полезна, когда для хостинга ассетов используются CDN, или когда необходимо обойти встроенные в браузеры конкурентные ограничения, используя различные псевдонимы доменов. Укороченная версия config.action_controller.asset_host.
config.assume_sslЗаставляет приложение считать, что все запросы приходят через SSL. Это полезно при проксировании через балансировщик нагрузки, который прекращает SSL, тогда направленный запрос появится в приложении как будто это HTTP вместо HTTPS. Тогда HTTP вместо HTTPS будет целью для перенаправления и куки безопасности. Эта промежуточная программа позволяет серверу допускать, что прокси уже прекратил SSL, но что запрос в действительности HTTPS.
config.autoflush_logВключает немедленную запись вывода в файл лога вместо буферизации. По умолчанию true.
config.autoload_lib(ignore:)Этот метод добавляет lib в config.autoload_paths и config.eager_load_paths.
Обычно в директории lib есть поддиректории, которые не должны автоматически или нетерпеливо загружаться. Пожалуйста, передайте их имя относительно lib в обязательном аргументе-ключе ignore. Например,
config.autoload_lib(ignore: %w(assets tasks generators))
Пожалуйста, за подробностями обратитесь к руководству по автозагрузке.
config.autoload_lib_once(ignore:)Метод config.autoload_lib_once похож на config.autoload_lib, за исключением того, что он добавляет lib в config.autoload_once_paths.
Вызывая config.autoload_lib_once, классы и модули в lib могут быть автоматически загружены, даже из инициализаторов приложения, но не могут быть перезагружены.
config.autoload_once_pathsПринимает массив путей, по которым Rails будет загружать константы, не стирающиеся между запросами. Уместна, если перезагрузка включена, что является в среде development по умолчанию. В противном случае все автозагрузки происходят только раз. Все элементы этого массива также должны быть в autoload_paths. По умолчанию пустой массив.
config.autoload_pathsПринимает массив путей, по которым Rails будет автоматически загружать константы. По умолчанию пустой массив. Начиная с Rails 6 не рекомендуется настраивать это. Подробнее смотрите в руководстве Автозагрузка и перезагрузка констант
config.beginning_of_weekУстанавливает начало недели по умолчанию для приложения. Принимает валидный день недели как символ (например, :monday).
config.cache_classesСтарая настройка эквивалентна !config.enable_reloading. Поддерживается для обратной совместимости.
config.cache_storeКонфигурирует, какое хранилище кэша использовать для кэширования Rails. Опции включают один из символов :memory_store, :file_store, :mem_cache_store, :null_store, :redis_cache_store или объект, реализующий API кэша. По умолчанию :file_store. Специфичные опции смотрите в Хранилища кэша.
config.colorize_loggingОпределяет, использовать ли коды цвета ANSI при логировании информации. По умолчанию true.
config.consider_all_requests_localЭто флажок. Если true, тогда любая ошибка вызовет детальную отладочную информацию, которая будет выгружена в отклик HTTP, и контроллер Rails::Info покажет контекст выполнения приложения в /rails/info/properties. По умолчанию true в средах development и test, и false в production. Для более детального контроля, установите ее в false и реализуйте show_detailed_exceptions? в контроллерах для определения, какие запросы должны предоставлять отладочную информацию при ошибках.
config.consoleПозволяет установить класс, который будет использован как консоль при вызове bin/rails console. Лучше всего запускать его в блоке console:
console do
# этот блок вызывается только при запуске консоли,
# поэтому можно безопасно поместить тут pry
require "pry"
config.console = Pry
end
config.content_security_policy_nonce_directivesСмотрите Добавление Nonce в руководстве по безопасности
config.content_security_policy_nonce_generatorСмотрите Добавление Nonce в руководстве по безопасности
config.content_security_policy_report_onlyСмотрите Отчет о нарушениях в руководстве по безопасности
config.credentials.content_pathПуть к файлу с зашифрованными учетными данными.
По умолчанию config/credentials/#{Rails.env}.yml.enc, если он существует, в противном случае config/credentials.yml.enc.
Чтобы команды bin/rails credentials распознали это значение, оно должно быть установлено в config/application.rb или config/environments/#{Rails.env}.rb.
config.credentials.key_pathПуть файла ключей зашифрованных учетных данных.
По умолчанию config/credentials/#{Rails.env}.key если он существует, в противном случае config/master.key.
Чтобы команды bin/rails credentials распознали это значение, оно должно быть установлено в config/application.rb или config/environments/#{Rails.env}.rb.
config.debug_exception_response_formatУстанавливает формат, используемый в откликах, когда возникают ошибки в среде development. По умолчанию :api для только API приложений и :default для нормальных приложений.
config.disable_sandboxКонтролирует, сможет ли кто-нибудь запустить консоль в режиме песочницы. Это полезно длинных сессий в песочнице, что может привести к дефициту памяти сервера базы данных. По умолчанию false.
config.dom_testing_default_html_versionУправляет тем, какой парсер HTML4 или HTML5 будет использоваться по умолчанию вспомогательными методами тестирования в Action View, Action Dispatch и rails-dom-testing.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :html4 |
| 7.1 | :html5 (смотри примечание) |
Библиотека Nokogiri не поддерживает парсер HTML5 на платформе JRuby, поэтому на JRuby Rails будет использовать парсер :html4.
config.eager_loadКогда true, лениво загружает все зарегистрированные config.eager_load_namespaces. Они включают ваше приложение, engine-ы, фреймворки Rails и любые другие зарегистрированные пространства имен.
config.eager_load_namespacesРегистрирует пространства имен, которые лениво загружаются, когда config.eager_load установлен true. Все пространства имен в этом списке должны отвечать на метод eager_load!.
config.eager_load_pathsПринимает массив путей, из которых Rails будет нетерпеливо загружать при загрузке, если config.eager_load истинна. По умолчанию каждая папка в директории app приложения.
config.enable_reloadingЕсли config.enable_reloading true, классы и модули приложения перезагружаются между веб-запросами, если они изменяются. По умолчанию true в среде development и false в среде production.
Также определен предикат config.reloading_enabled?.
config.encodingНастраивает кодировку приложения. По умолчанию UTF-8.
config.exceptions_appУстанавливает приложение по обработке исключений, вызываемое промежуточной программой ShowException, когда происходит исключение. По умолчанию ActionDispatch::PublicExceptions.new(Rails.public_path).
Приложения по обработке исключений должно обрабатывать ошибки ActionDispatch::Http::MimeNegotiation::InvalidType, которые вызываются, когда клиент посылает неправильные заголовки Accept или Content-Type. Приложение по умолчанию ActionDispatch::PublicExceptions делает это автоматически, устанавливая Content-Type в text/html и возвращая статус 406 Not Acceptable. Неудача в обработке этой ошибки приведет к 500 Internal Server Error.
С помощью Rails.application.routes, RouteSet в качестве приложения по обработке исключений также требует эту специальную обработку. Это может выглядеть так:
# config/application.rb
config.exceptions_app = CustomExceptionsAppWrapper.new(exceptions_app: routes)
# lib/custom_exceptions_app_wrapper.rb
class CustomExceptionsAppWrapper
def initialize(exceptions_app:)
@exceptions_app = exceptions_app
end
def call(env)
request = ActionDispatch::Request.new(env)
fallback_to_html_format_if_invalid_mime_type(request)
@exceptions_app.call(env)
end
private
def fallback_to_html_format_if_invalid_mime_type(request)
request.formats
rescue ActionDispatch::Http::MimeNegotiation::InvalidType
request.set_header "CONTENT_TYPE", "text/html"
end
end
config.file_watcherЭто класс, используемый для обнаружения обновлений файлов в файловой системе, когда config.reload_classes_only_on_change равно true. Rails поставляется с ActiveSupport::FileUpdateChecker (по умолчанию) и ActiveSupport::EventedFileUpdateChecker (этот зависит от гема listen). Пользовательские классы должны соответствовать ActiveSupport::FileUpdateChecker API.
config.filter_parametersИспользуется для фильтрации параметров, которые не должны быть показаны в логах, такие как пароли или номера кредитных карт. Он также фильтрует чувствительные параметры в столбцах базы данных при вызове #inspect на объектах Active Record. По умолчанию Rails фильтрует пароли, добавляя следующие фильтры в config/initializers/filter_parameter_logging.rb.
Rails.application.config.filter_parameters += [
:passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
Фильтр параметров работает как частично соответствующее регулярное выражение.
config.filter_redirectИспользуется для фильтрации путей перенаправления из логов приложения.
Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]
Фильтр перенаправления работает, тестируя, что пути включают строки или регулярные выражения.
config.force_sslПринуждает все запросы обслуживаться протоколом HTTPS и устанавливает "https://" как протокол по умолчанию при генерации URL. Принуждение к HTTPS обрабатывается промежуточной программой ActionDispatch::SSL, которая может быть настроена с помощью config.ssl_options.
config.helpers_pathsОпределяет массив дополнительных путей для загрузки хелперов вью.
config.host_authorizationПринимает хэш опций для конфигурации промежуточной программы HostAuthorization
config.hostsМассив строк, регулярных выражений или IPAddr используется для валидации заголовка Host. Используется промежуточной программы HostAuthorization для помощи в предотвращении атак с перепривязыванием DNS.
config.javascript_pathУстанавливает путь, по которому располагается JavaScript приложения относительно директории app и значение по умолчанию javascript. Сконфигурированный javascript_path приложения будет убран из autoload_paths.
config.log_file_sizeОпределяет максимальный размер файла лога Rails в байтах. По умолчанию 104_857_600 (100 MB) в development и test, и неограниченный во всех других средах.
config.log_formatterОпределяет форматер для логгера Rails. Эта опция по умолчанию равна экземпляру ActiveSupport::Logger::SimpleFormatter для всех сред. Если установите значение для config.logger, вы должны вручную передать значение вашего форматера для вашего логгера до того, как он будет обернут в экземпляр ActiveSupport::TaggedLogging, Rails не сделает это за вас.
config.log_levelОпределяет многословность логгера Rails. Эта опция по умолчанию :debug для всех сред, кроме production, где он по умолчанию :info. Доступные уровни лога: :debug, :info, :warn, :error, :fatal, and :unknown.
config.log_tagsПринимает список методов, на которые отвечает объект request, объект Proc, который принимает request объект, или что-то, отвечающее на to_s. С помощью этого становится просто тегировать строчки лога отладочной информацией, такой как поддомен и id запроса - очень полезно для отладки многопользовательского приложения.
config.loggerЭто логгер, который будет использован для Rails.logger и любого логирования, относящегося к Rails, такого как ActiveRecord::Base.logger. По умолчанию это экземпляр ActiveSupport::TaggedLogging, оборачивающий экземпляр ActiveSupport::Logger, который пишет лог в директорию log/. Можно предоставить произвольный логгер, чтобы получить полную совместимость, нужно следовать следующим рекомендациям:
config.log_formatter.
ActiveSupport::TaggedLogging.
ActiveSupport::LoggerSilence. Класс ActiveSupport::Logger уже включает эти модули.
class MyLogger < ::Logger
include ActiveSupport::LoggerSilence
end
mylogger = MyLogger.new(STDOUT)
mylogger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(mylogger)
config.middlewareПозволяет настроить промежуточные программы приложения. Это подробнее раскрывается в разделе Конфигурирование промежуточных программ ниже.
config.precompile_filter_parametersКогда true, прекомпилирует config.filter_parameters с помощью ActiveSupport::ParameterFilter.precompile_filters.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true |
config.public_file_server.enabledОпределяет, должен ли Rails сам обслуживать статические файлы из каталога public. По умолчанию значение равно true.
Если для обслуживания статических файлов должен использоваться другой серверный софт (например, NGINX или Apache), установите для этого параметра значение false.
config.railties_orderПозволяет вручную указать порядок загрузки Railtie/Engine. Значение по умолчанию [:all].
config.railties_order = [Blog::Engine, :main_app, :all]
config.rake_eager_loadКогда true, нетерпеливо загружает приложении при запуске задач Rake. По умолчанию false.
config.read_encrypted_secretsDEPRECATED: Следует использовать учетные данные вместо зашифрованных секретов.
Когда true, попытается прочитать зашифрованные секреты из config/secrets.yml.enc
config.relative_url_rootМожно использовать, чтобы сообщить Rails, что вы развертываете в поддиректорию. По умолчанию ENV['RAILS_RELATIVE_URL_ROOT'].
config.reload_classes_only_on_changeВключает или отключает перезагрузку классов только при изменении отслеживаемых файлов. По умолчанию отслеживает все по путям автозагрузки и установлена true. Если config.enable_reloading установлена false, эта опция игнорируется.
config.require_master_keyПриложение не будет загружено, если главный ключ не доступен в ENV["RAILS_MASTER_KEY"] или файле config/master.key.
config.sandbox_by_defaultКогда true, Rails-консоль запускается в режиме песочницы. Для запуска Rails-консоли в режиме без песочницы необходимо указать флаг --no-sandbox. Это полезно для предотвращения непреднамеренного изменения данных в рабочей базе данных. По умолчанию false.
config.secret_key_baseФолбэк для указания секрета для генератора ключей приложения. Рекомендовано оставить его неустановленным, и вместо этого указать secret_key_base в config/credentials.yml.enc. Смотрите подробности и альтернативные конфигурационные методы в документации secret_key_base API.
config.server_timingКогда true, добавляет промежуточную программу `ServerTiming в стек промежуточных программ. Значение этого параметра по умолчанию false, однако в автоматически создаваемом файле config/environments/development.rb оно устанавливается на true.
config.session_optionsДополнительные опции, передаваемые в config.session_store. Следует использовать config.session_store для их установки вместо изменения.
config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}
config.session_storeОпределяет, какой класс использовать для хранения сессии. Возможные значения :cache_store, :cookie_store, :mem_cache_store, пользовательское хранилище или :disabled. :disabled говорит Rails не связываться с сессиями.
Эта настройка конфигурируется с помощью вызова обычного метода, а не метода сеттера. Это позволяет передать дополнительные опции:
config.session_store :cookie_store, key: "_your_app_session"
Если пользовательское хранилище указано как символ, он будет разрешен в пространстве имен ActionDispatch::Session:
# использовать ActionDispatch::Session::MyCustomStore в качестве хранилища сессии
config.session_store :my_custom_store
Хранилище по умолчанию это хранилище в куки с именем приложения в качестве ключа сессии.
config.ssl_optionsКонфигурационные опции для промежуточной программы ActionDispatch::SSL.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | {} |
| 5.0 | { hsts: { subdomains: true } } |
config.time_zoneУстанавливает временную зону по умолчанию для приложения и включает понимание временных зон для Active Record.
config.xИспользуется для простого добавления многоуровневых произвольных настроек в объект конфига приложения
config.x.payment_processing.schedule = :daily
Rails.configuration.x.payment_processing.schedule # => :daily
Смотрите Произвольные настройки
config.assets.css_compressorОпределяет используемый компрессор CSS. По умолчанию установлен sass-rails. Единственное альтернативное значение в настоящий момент это :yui, использующее гем yui-compressor.
config.assets.js_compressorОпределяет используемый компрессор JavaScript. Возможные варианты :terser, :closure, :uglifier и :yui требуют использование гемов terser, closure-compiler, uglifier или yui-compressor соответственно.
config.assets.gzipФлажок, включающий создание сжатых версий скомпилированных ассетов вместе с несжатыми ассетами. По умолчанию установлено true.
config.assets.pathsСодержит пути, используемые для поиска ассетов. Присоединение путей к этой конфигурационной опции приведет к тому, что эти пути будут использованы в поиске ассетов.
config.assets.precompileПозволяет определить дополнительные ассеты (иные, чем application.css и application.js), которые будут предварительно компилированы при запуске bin/rails assets:precompile.
config.assets.unknown_asset_fallbackПозволяет модифицировать поведение конвейера ресурсов, когда ассет не в нем, если вы используете sprockets-rails 3.2.0 или новее.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 5.1 | false |
config.assets.prefixОпределяет префикс из которого будут обслуживаться ассеты. По умолчанию /assets.
config.assets.manifestОпределяет полный путь для использования файлом манифеста прекомпилятора ассетов. По умолчанию файл называется manifest-<random>.json в директории config.assets.prefix в папке public.
config.assets.digestВключает использование меток SHA256 в именах ассетов. Установлено по умолчанию true.
config.assets.debugОтключает объединение и сжатие ассетов. Установлено по умолчанию true в development.rb.
config.assets.versionОпция, используемая в генерации хэша SHA256. Ее можно использовать чтобы принудительно перекомпилировать все файлы.
config.assets.compileБулево значение, используемое для включения компиляции Sprockets на лету в production.
config.assets.loggerПринимает логгер, соответствующий интерфейсу Log4r, или дефолтный Ruby класс Logger. По умолчанию такой же, как указан в config.logger. Установка config.assets.logger в false отключает логирование отдаваемых ассетов.
config.assets.quietОтключает логирование запросов к ассетам. Установлено true по умолчанию в development.rb.
Rails позволяет изменить, какие генераторы следует использовать, с помощью метода config.generators. Этот метод принимает блок:
config.generators do |g|
g.orm :active_record
g.test_framework :test_unit
end
Полный перечень методов, которые можно использовать в этом блоке, следующий:
force_plural позволяет имена моделей во множественном числе. По умолчанию false.
helper определяет, генерировать ли хелперы. По умолчанию true.
integration_tool определяет интеграционный инструмент, используемый для генерации интеграционных тестов. По умолчанию :test_unit.
system_tests определяет интеграционный инструмент, используемый для генерации системных тестов. По умолчанию :test_unit.
orm определяет используемую orm. По умолчанию false и используется Active Record.
resource_controller определяет используемый генератор для генерация контроллера при использовании bin/rails generate resource. По умолчанию :controller.
resource_route определяет нужно ли генерировать определение ресурсного маршрута или нет. По умолчанию true.
scaffold_controller, отличающийся от resource_controller, определяет используемый генератор для генерации контроллера скаффолда при использовании bin/rails generate scaffold. По умолчанию :scaffold_controller.
test_framework определяет используемый тестовый фреймворк. По умолчанию false, и используется minitest.
template_engine определяет используемый движок шаблонов, такой как ERB или Haml. По умолчанию :erb.
apply_rubocop_autocorrect_after_generate! применяет автокоррекцию RuboCop после запуска генераторов Rails.
Каждое приложение Rails имеет стандартный набор промежуточных программ, используемых в следующем порядке в среде development:
ActionDispatch::HostAuthorizationПредотвращает от перепривязывания DNS и других атак, связанных с заголовком Host. Это включено по умолчанию в среде development с помощью следующей конфигурации:
Rails.application.config.hosts = [
IPAddr.new("0.0.0.0/0"), # All IPv4 addresses.
IPAddr.new("::/0"), # All IPv6 addresses.
"localhost", # The localhost reserved domain.
ENV["RAILS_DEVELOPMENT_HOSTS"] # Additional comma-separated hosts for development.
]
В других средах Rails.application.config.hosts пустой, и никаких проверок заголовка Host не производится. Если хотите защититься от атак на заголовок в production, нужно вручную разрешить допустимые хосты с помощью:
Rails.application.config.hosts << "product.com"
Хост запроса сверяется с записями hosts с помощью case-оператора (#===), который позволяет hosts поддерживать записи типа Regexp, Proc, IPAddr и так далее. Вот пример с регулярным выражением.
# Разрешает запросы с поддоменов, наподобие `www.product.com` и `beta1.product.com`.
Rails.application.config.hosts << /.*\.product\.com/
Предоставленное регулярное выражение будет обернуто обоими якорями (\A и \z), поэтому оно должно соответствовать полному имени хоста. К примеру, /product.com/, будучи обернутым, не будет соответствовать www.product.com.
Поддерживается особенный случай, позволяющий разрешить все поддомены:
# Разрешает запросы с поддоменов, наподобие `www.product.com` и `beta1.product.com`.
Rails.application.config.hosts << ".product.com"
Можно исключить определенные запросы из проверок Host Authorization, установив config.host_authorization.exclude:
# Исключает запросы для пути /healthcheck/ из проверки хоста
Rails.application.config.host_authorization = {
exclude: ->(request) { request.path.include?('healthcheck') }
}
Когда запрос приходит с неавторизованного хоста, запустится приложение Rack по умолчанию, которое ответит 403 Forbidden. Это можно настроить, установив config.host_authorization.response_app. Например:
Rails.application.config.host_authorization = {
response_app: -> env do
[400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
end
}
ActionDispatch::ServerTimingДобавляет в отклик заголовок Server-Timing, который включает в себя показатели производительности сервера. Эти данные можно просмотреть, изучив ответ на вкладке "Network" в инструментах разработчика браузера. Большинство браузеров предоставляют вкладку "Timing", которая визуализирует эти данные.
ActionDispatch::SSLПринуждает каждый запрос быть обслуженным с помощью HTTPS. Включен, если config.force_ssl установлена true. Передаваемые сюда опции могут быть настроены с помощью config.ssl_options.
ActionDispatch::StaticИспользуется для обслуживания статичных ассетов. Отключено, если config.public_file_server.enabled равна false. Установите config.public_file_server.index_name если вам нужно обслуживать индексный файл статичной директории, который называется не index. Например, для обслуживания main.html вместо index.html для запросов, установите config.public_file_server.index_name в "main".
ActionDispatch::ExecutorПозволяет тредобезопасную перезагрузку кода. Отключено, если config.allow_concurrency установлена false, что загружает Rack::Lock. Rack::Lock оборачивает приложение в мьютекс, таким образом оно может быть вызвано только в одном треде одновременно.
ActiveSupport::Cache::Strategy::LocalCacheСлужит простым кэшем в памяти. Этот кэш не является тредобезопасным и предназначен только как временное хранилище кэша для отдельного треда.
Rack::RuntimeУстанавливает заголовок X-Runtime, содержащий время (в секундах), затраченное на выполнение запроса.
Rails::Rack::LoggerПишет в лог, что начался запрос. После выполнения запроса сбрасывает логи.
ActionDispatch::ShowExceptionsЛовит исключения, возвращаемые приложением, и рендерит прекрасные страницы исключения, если запрос локальный, или если config.consider_all_requests_local установлена true. Если config.action_dispatch.show_exceptions установлена :none, исключения будут вызваны, несмотря ни на что.
ActionDispatch::RequestIdСоздает уникальный заголовок X-Request-Id, доступный для отклика, и включает метод ActionDispatch::Request#uuid. Настраивается с помощью config.action_dispatch.request_id_header.
ActionDispatch::RemoteIpПроверяет на атаки с ложных IP и получает валидный client_ip из заголовков запроса. Конфигурируется с помощью опций config.action_dispatch.ip_spoofing_check и config.action_dispatch.trusted_proxies.
Rack::SendfileПерехватывает отклики, чьи тела были обслужены из файла, и заменяет их специфичным для сервером заголовком X-Sendfile. Конфигурируется с помощью config.action_dispatch.x_sendfile_header.
ActionDispatch::CallbacksЗапускает подготовленные колбэки до обслуживания запроса.
ActionDispatch::CookiesУстанавливает куки для каждого запроса.
ActionDispatch::Session::CookieStoreОтветственна за хранение сессии в куки. Для этого может использоваться альтернативная промежуточная программа, при измененииconfig.session_store.
ActionDispatch::FlashНастраивает ключи flash. Доступно, только если у config.session_store установлено значение.
Rack::MethodOverrideПозволяет методу быть переопределенным, если установлен params[:_method]. Это промежуточная программа, поддерживающая типы методов HTTP PATCH, PUT и DELETE.
Rack::HeadВозвращает пустое тело ответа для всех запросов HEAD. Это не влияет на другие типы запросов.
Кроме этих полезных промежуточных программ можно добавить свои, используя метод config.middleware.use:
config.middleware.use Magical::Unicorns
Это поместит промежуточную программу Magical::Unicorns в конец стека. Можно использовать insert_before, если желаете добавить промежуточную программу перед другой.
config.middleware.insert_before Rack::Head, Magical::Unicorns
Или можно вставить промежуточную программу на конкретное место с помощью индексов. Например, если хотите вставить промежуточную программу Magical::Unicorns наверх стека, это можно сделать так:
config.middleware.insert_before 0, Magical::Unicorns
Также есть insert_after, который вставляет промежуточную программу после другой:
config.middleware.insert_after Rack::Head, Magical::Unicorns
Промежуточные программы также могут быть полностью переставлены и заменены другими:
config.middleware.swap ActionController::Failsafe, Lifo::Failsafe
Промежуточные программы могут быть перемещены:
config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns
Это поставит промежуточную программу Magical::Unicorns перед ActionDispatch::Flash. Можно поставить после:
config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
Они также могут быть убраны из стека полностью:
config.middleware.delete Rack::MethodOverride
Все эти конфигурационные опции делегируются в библиотеку I18n.
config.i18n.available_localesОпределяет разрешенные доступные локали приложения. По умолчанию все ключи локалей, обнаруженные в файлах локалей, обычно только :en для нового приложения.
config.i18n.default_localeУстанавливает локаль по умолчанию для приложения, используемого для интернационализации. По умолчанию :en.
config.i18n.enforce_available_localesОбеспечивает, что все локали, переданные из i18n, должны быть объявлены в списке available_locales, вызывая исключение I18n::InvalidLocale при установке недоступной локали. По умолчанию true. Рекомендуется не отключать эту опцию, если этого не сильно требуется, так как она работает в качестве меры безопасности от установки неверной локали на основе пользовательских данных.
config.i18n.load_pathУстанавливает путь, используемый Rails для поиска файлов локали. По умолчанию config/locales/*.{yml,rb}.
config.i18n.raise_on_missing_translationsОпределяет, должна ли вызываться ошибка на отсутствующих переводах. По умолчанию false.
config.i18n.fallbacksУстанавливает поведение фолбэка для отсутствующих переводов. Вот 3 примера использования этой опции:
Можно установить опции true для использования локали по умолчанию в качестве фолбэка следующим образом:
config.i18n.fallbacks = true
Или можно установить массив локалей в качестве фолбэка так:
config.i18n.fallbacks = [:tr, :en]
Или можно установить различные фолбэки для различных локалей. Например, если хотите использовать :tr для :az и :de, :en для :da в качестве фолбэков, можно сделать так:
config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
# или
config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
config.active_model.i18n_customize_full_messageКонтролирует, может ли формат Error#full_message быть переопределен в файле локали i18n. По умолчанию false.
Когда установлен true, full_message будет искать формат на уровне атрибута и модели в файлах локали. Формат по умолчанию это "%{attribute} %{message}", где attribute это имя атрибута, а message это сообщение, специфичное для валидации. Следующий пример переопределяет формат для всех атрибутов Person, а также формат для атрибута, специфичного для Person (age).
class Person
include ActiveModel::Validations
attr_accessor :name, :age
validates :name, :age, presence: true
end
en:
activemodel: # or activerecord:
errors:
models:
person:
# Override the format for all Person attributes:
format: "Invalid %{attribute} (%{message})"
attributes:
age:
# Override the format for the age attribute:
format: "%{message}"
blank: "Please fill in your %{attribute}"
irb> person = Person.new.tap(&:valid?)
irb> person.errors.full_messages
=> [
"Invalid Name (can't be blank)",
"Please fill in your Age"
]
irb> person.errors.messages
=> {
:name => ["can't be blank"],
:age => ["Please fill in your Age"]
}
config.active_record включает ряд конфигурационных опций:
config.active_record.loggerПринимает логгер, соответствующий интерфейсу Log4r или дефолтного класса Ruby Logger, который затем передается на любые новые сделанные соединения с базой данных. Можете получить этот логгер, вызвав logger или на любом классе модели Active Record, или на экземпляре модели Active Record. Установите его в nil, чтобы отключить логирование.
config.active_record.primary_key_prefix_typeПозволяет настроить именование столбцов первичного ключа. По умолчанию Rails полагает, что столбцы первичного ключа именуются id (и эта конфигурационная опция не нуждается в установке). Есть два возможных варианта:
:table_name сделает первичный ключ для класса Customer как customerid
:table_name_with_underscore сделает первичный ключ для класса Customer как customer_id
config.active_record.table_name_prefixПозволяет установить глобальную строку, добавляемую в начало имен таблиц. Если установить ее равным northwest_, то класс Customer будет искать таблицу northwest_customers. По умолчанию это пустая строка.
config.active_record.table_name_suffixПозволяет установить глобальную строку, добавляемую в конец имен таблиц. Если установить ее равным _northwest, то класс Customer будет искать таблицу customers_northwest. По умолчанию это пустая строка.
config.active_record.schema_migrations_table_nameПозволяет установить строку, которая будет использоваться как имя таблицы для миграций схемы.
config.active_record.internal_metadata_table_nameПозволяет установить строку, которая будет использоваться как имя таблицы для внутренних метаданных.
config.active_record.protected_environmentsПозволяет установить массив имен сред, где деструктивные экшны должны быть запрещены.
config.active_record.pluralize_table_namesОпределяет, должен Rails искать имена таблиц базы данных в единственном или множественном числе. Если установлено true (по умолчанию), то класс Customer будет использовать таблицу customers. Если установить false, то класс Customers будет использовать таблицу customer.
config.active_record.default_timezoneОпределяет, использовать Time.local (если установлено :local) или Time.utc (если установлено :utc) для считывания даты и времени из базы данных. По умолчанию :utc.
config.active_record.schema_formatРегулирует формат для выгрузки схемы базы данных в файл. Опции следующие: :ruby (по умолчанию) для независимой от типа базы данных версии, зависимой от миграций, или :sql для набора (потенциально зависимого от типа БД) выражений SQL.
config.active_record.error_on_ignored_orderОпределяет, должна ли быть вызвана ошибка, если во время порционного (batch) запроса была проигнорирована сортировка или лимит. Опцией может быть либо true (вызывается ошибка), либо false (предупреждение). По умолчанию false.
config.active_record.timestamped_migrationsРегулирует, должны ли миграции нумероваться серийными номерами или временными метками. По умолчанию true для использования временных меток, которые более предпочтительны, если над одним проектом работают несколько разработчиков.
config.active_record.automatically_invert_plural_associationsУправляет тем, будет ли Active Record автоматически искать обратные связи с названием во множественном числе.
Пример:
class Post < ApplicationRecord
has_many :comments
end
class Comment < ApplicationRecord
belongs_to :post
end
В этом случае Active Record раньше искал только связь :comment (в единственном числе) в модели Post и не находил ее.
При включении этой опции он также будет искать связь :comments (во множественном числе). В подавляющем большинстве случаев обнаружение обратной связи полезно, поскольку оно может предотвратить некоторые бесполезные запросы, но это может привести к проблемам обратной совместимости со старым кодом, который этого не ожидает.
Это поведение можно отключить для каждой модели отдельно:
class Comment < ApplicationRecord
self.automatically_invert_plural_associations = false
belongs_to :post
end
А также для каждой конкретной связи:
class Comment < ApplicationRecord
self.automatically_invert_plural_associations = true
belongs_to :post, inverse_of: nil
end
config.active_record.validate_migration_timestampsУправляет валидацией временных меток миграций. Если он установлен, то если префикс временной метки более чем на сутки вперед от текущего времени будет выдана ошибка. Это сделано для того, чтобы предотвратить преднамеренное выставление будущих дат для файлов миграции, что может повлиять на генерацию миграций и другие команды управления миграциями. config.active_record.timestamped_migrations должен быть установлен true.
The default value depends on the config.load_defaults target version:
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.2 | true |
config.active_record.db_warnings_actionРегулирует действие, которое следует предпринять, когда запрос SQL производит предупреждение. Доступны следующие опции:
:ignore - Предупреждения базы данных должны игнорироваться. Это по умолчанию.
:log - Предупреждения базы данных должны логироваться с помощью ActiveRecord.logger на уровне :warn.
:raise - Предупреждения базы данных должны вызываться как ActiveRecord::SQLWarning.
:report - Предупреждения базы данных должны сообщаться подписчикам репортера ошибок Rails.
Произвольный 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
config.active_record.db_warnings_ignoreУказывает список разрешенных кодов и сообщений, которые следует игнорировать, вне зависимости от настроенной db_warnings_action. Поведением по умолчанию является сообщение обо всех предупреждениях. Предупреждения для игнорирования могут быть определены как String or Regexp. Например:
config.active_record.db_warnings_action = :raise
# Следующие предупреждения не будут вызваны
config.active_record.db_warnings_ignore = [
/Invalid utf8mb4 character string/,
"An exact warning message",
"1062", # MySQL Error 1062: Duplicate entry
]
config.active_record.migration_strategyКонтролирует класс стратегии, используемый для выполнения методов выражений схемы в миграции. Класс по умолчанию делегирует к адаптеру соединения. Пользовательские стратегии должны наследоваться от ActiveRecord::Migration::ExecutionStrategy, или могут наследоваться от DefaultStrategy, которая сохранит поведение по умолчанию для нереализованных методов:
class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
def drop_table(*)
raise "Dropping tables is not supported!"
end
end
config.active_record.migration_strategy = CustomMigrationStrategy
config.active_record.lock_optimisticallyРегулирует, должен ли Active Record использовать оптимистическую блокировку. По умолчанию true.
config.active_record.cache_timestamp_formatУправляет форматом значения временной метки в ключе кэширования. По умолчанию :usec.
config.active_record.record_timestampsЭто булево значение, управляющее, должна ли происходить временная метка операций модели create и update. Значение по умолчанию true.
config.active_record.partial_insertsЭто булево значение, управляющее, должны ли использоваться частичные записи при создании новых записей (т.е. вставлять ли только те атрибуты, которые отличаются от дефолтных).
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 7.0 | false |
config.active_record.partial_updatesЭто булево значение, управляющее, должны ли использоваться частичные записи при обновлении существующих записей (т.е. обновления только тех атрибутов, которые помечены dirty). Отметьте, что при использовании частичной записи также следует использовать оптимистическую блокировку config.active_record.lock_optimistically, так как конкурентные обновления могут записывать атрибуты, основываясь на возможном устаревшем статусе чтения. Значение по умолчанию true.
config.active_record.maintain_test_schemaЭто булево значение, управляющее, должен ли Active Record пытаться сохранять вашу тестовую базу данных актуальной с db/schema.rb (или db/structure.sql) при запуске тестов. По умолчанию true.
config.active_record.dump_schema_after_migrationЭто флажок, который контролирует, должна ли происходить выгрузка схемы (db/schema.rb или db/structure.sql) при запуске миграций. Он установлен false в config/environments/production.rb, генерируемом Rails. Значение по умолчанию true, если эта конфигурация не установлена.
config.active_record.dump_schemasУправляет, какие схемы баз данных будут выгружаться при вызове db:schema:dump. Опции: :schema_search_path (по умолчанию), при которой выгружается любая схема, перечисленная в schema_search_path, :all, при которой выгружаются все схемы, независимо от schema_search_path, или строки со схемами, разделенными через запятую.
config.active_record.before_committed_on_all_recordsВключает колбэки before_committed! на всех зарегистрированных записях в транзакции. Предыдущим поведением был запуск колбэков на первой копии записи, если в транзакции зарегистрировано несколько копий одной и той же записи.
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true |
config.active_record.belongs_to_required_by_defaultЭто булево значение и управляет, будет ли валидация записи падать, если отсутствует связь belongs_to.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | nil |
| 5.0 | true |
config.active_record.belongs_to_required_validates_foreign_keyВключает валидацию наличия столбцов, только относящиеся к родителю, когда родитель обязателен. Предыдущим поведением была валидация родительской записи, что выполняло дополнительный запрос для получения родителя каждый раз, когда обновлялась дочерняя запись, даже если родитель не изменялся.
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 7.1 | false |
config.active_record.marshalling_format_versionКогда установлено 7.1, включает более эффективную сериализацию экземпляров Active Record с помощью Marshal.dump.
Это изменяет формат сериализации, поэтому модели, сериализованные данным образом, не смогут быть прочитаны старыми (< 7.1) версиями Rails. Однако, сообщения, использующие старый формат, все еще могут быть прочитаны, вне зависимости от того, была ли включена эта оптимизация.
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | 6.1 |
| 7.1 | 7.1 |
config.active_record.action_on_strict_loading_violationВключает вызов или логирование исключения, если на связи установлено strict_loading. Значение по умолчанию :raise во всех средах. Можно изменить на :log, чтобы посылать нарушения в логгер вместо вызова ошибки.
config.active_record.strict_loading_by_defaultЭто булево значение, включающее или отключающее режим strict_loading по умолчанию. По умолчанию false.
config.active_record.warn_on_records_fetched_greater_thanПозволяет установить порог для предупреждения для итогового размера запроса. Если количество возвращаемых записей в запросе будет превышать пороговое значение, запишется предупреждение. Это может быть полезным для выявления запросов, которые могут быть причиной увеличения требуемой памяти.
config.active_record.index_nested_attribute_errorsПозволяет ошибкам для вложенных отношений has_many также быть отраженными с индексом. По умолчанию false.
config.active_record.use_schema_cache_dumpПозволяет пользователям получить информацию о кэше схемы из db/schema_cache.yml (сгенерированного с помощью bin/rails db:schema:cache:dump), вместо отправления запроса в базу данных для получения этой информации. По умолчанию true.
config.active_record.cache_versioningОбозначает, нужно ли использовать стабильный метод #cache_key, сопровождаемый изменившейся версией в методе #cache_version.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.2 | true |
config.active_record.collection_cache_versioningПозволяет повторное использование того же ключа кэширования, когда объект, кэшированный с типом ActiveRecord::Relation, изменяется из-за перемещения волатильной информации (максимальной даты обновления и количества) из ключа кэширования relation в версию кэша для поддержки повторного использования ключа кэширования.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 6.0 | true |
config.active_record.has_many_inversingВключает настройку инверсии записи при переходе по связям belongs_to и has_many.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 6.1 | true |
config.active_record.automatic_scope_inversingВключает автоматическое определение inverse_of для связей со скоупом.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.0 | true |
config.active_record.destroy_association_async_jobПозволяет указывать задание, используемое для удаления связанных записей в фоновом режиме. По умолчанию ActiveRecord::DestroyAssociationAsyncJob.
config.active_record.destroy_association_async_batch_sizeПозволяет указать максимальное количество записей, которое будет уничтожено в фоновой задаче с помощью опции связи dependent: :destroy_async. При прочих равных, меньший размер порции будет ставить в очередь больше быстрых фоновых задач, а большой размер порции будет ставить в очередь меньше, но долгих фоновых задач. Эта опция по умолчанию nil, что приведет к тому, что все зависимые записи для заданной связи будут уничтожены в той же самой фоновой задаче.
config.active_record.queues.destroyПозволяет указывать очередь Active Job, используемую для заданий уничтожения. Когда эта опция nil, задания уничтожения посылаются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name). По умолчанию nil.
config.active_record.enumerate_columns_in_select_statementsКогда true, имена столбцов будут всегда включаться в выражения SELECT, и будут избегаться запросы с подстановкой SELECT * FROM .... Это помогает избежать ошибок кэширования в prepared statement при добавлении столбцов в базу данных PostgreSQL, к примеру. По умолчанию false.
config.active_record.verify_foreign_keys_for_fixturesОбеспечивает, что все ограничения внешних ключей валидны, после того, как в тестах загружены фикстуры. Поддерживается только для PostgreSQL и SQLite.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.0 | true |
config.active_record.raise_on_assign_to_attr_readonlyВключает вызов ошибки при присвоении атрибутам attr_readonly. Предыдущим поведением было разрешение присвоения, но молчаливо не сохраняя изменения в базу данных.
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true |
config.active_record.run_commit_callbacks_on_first_saved_instances_in_transactionКогда несколько экземпляров Active Record изменяет ту же самую запись внутри транзакции, Rails запускает колбэки after_commit или after_rollback для только одного из них. Эта опция указывает, как Rails выбирает, какой экземпляр получит колбэки.
Когда true, транзакционные колбэки запускаются на первом экземпляре для сохранения, даже хотя состояние экземпляры может быть устаревшим.
Когда false, транзакционные колбэки запускаются на экземпляре с самым свежим состоянием. Эти экземпляры выбираются так:
after_create_commit будут запущены на втором экземпляре. Это вместо колбэков after_update_commit, который был бы наивно запущен на основе состояния этого экземпляра.
after_destroy_commit будут запущены на последнем уничтоженном экземпляре, даже если устаревший экземпляр впоследствии выполнил обновление (что затронуло 0 строк).
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 7.1 | false |
config.active_record.default_column_serializerРеализация сериализатора для использования, если ничто явно не указано для заданного столбца.
Исторически serialize и store, хотя позволяют использование альтернативные реализации сериализатора, по умолчанию использовали YAML, но это не очень эффективный формат, и может быть источником уязвимостей безопасности, если применяется неосторожно.
Поэтому рекомендуется предпочитать более строгие и ограниченные форматы для сериализации базы данных.
К сожалению нет каких-либо реально подходящих умолчаний, доступных в стандартной библиотеке Ruby. JSON мог бы работать в качестве формата, но гемы json приводят неподдерживаемые типы к строкам, что может привести к багам.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | YAML |
| 7.1 | nil |
config.active_record.run_after_transaction_callbacks_in_order_definedКогда true, колбэки after_commit выполняются в порядке, в котором они определены в модели. Когда false, они выполняются в обратном порядке.
Все другие колбэки всегда выполняются в порядке, в котором они определены в модели (кроме использующих prepend: true).
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true |
config.active_record.query_log_tags_enabledУказывает, включать ли комментарии на уровне адаптера. По умолчанию false.
Когда установлено true, prepared statements базы данных будут автоматически отключены.
config.active_record.query_log_tagsОпределяет массив, указывающий теги ключа/значения для вставки в комментарий SQL. По умолчанию [ :application, :controller, :action, :job ]. Доступные теги: :application, :controller, :namespaced_controller, :action, :job и :source_location.
config.active_record.query_log_tags_formatSymbol определяет форматер для использования с тегами. Валидные значения это :sqlcommenter и :legacy.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :legacy |
| 7.1 | :sqlcommenter |
config.active_record.cache_query_log_tagsУказывает, включать ли кэширование тегов лога запроса. Для приложений с большим количеством запросов кэширование тегов лога запроса может предоставить улучшение производительности, когда контекст не меняется на протяжение жизненного цикла запроса или выполнения задания. По умолчанию false.
config.active_record.schema_cache_ignored_tablesОпределяет список таблиц, которые должны игнорироваться при генерации кэша схемы. Она принимает массив строк, представляющих имена таблицы, или регулярных выражений.
config.active_record.verbose_query_logsОпределяет, должно ли логироваться место расположение методов, осуществляющих запросы к базе данных, под соответствующими запросами. По умолчанию флажок true в development и false во всех других средах.
config.active_record.sqlite3_adapter_strict_strings_by_defaultУказывает, должен ли SQLite3Adapter быть использован в режиме строгих строк. Использование режима строгих строк отключает строки с двойными кавычками.
в SQLite есть несколько причуд со строковыми литералами с двойными кавычками. Он сначала пытается рассматривать строки с двойными кавычками в качестве имен идентификаторов, но, если они не существуют, он рассматривает их как строковые литералы. Из-за этого ошибки могут остаться незамеченными. Например, возможно создать индекс для несуществующего столбца. Подробности смотрите в документации SQLite.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true |
config.active_record.async_query_executorОпределяет, как организуется пул асинхронных запросов.
По умолчанию nil, что означает, что load_async отключен, и вместо этого запросы выполняются непосредственно в фоновом режиме. Для фактического выполнения запросов асинхронно, она должна быть установлена как либо :global_thread_pool, или :multi_thread_pool.
:global_thread_pool будет использовать единый пул для всех баз данных, с которым соединено приложение. Это предпочтительная конфигурация для приложений с единственной базой данных, или приложений, которые всегда запрашивают только один шард базы данных за раз.
:multi_thread_pool будет использовать один пул на каждую базу данных, и размер каждого пула может быть сконфигурирован отдельно в database.yml с помощью свойств max_threads и min_thread. Это полезно для приложений, регулярно запрашивающих несколько баз данных за раз, и которым нужно более подробное определение максимального параллелизма.
config.active_record.global_executor_concurrencyИспользуется в связке с config.active_record.async_query_executor = :global_thread_pool, определяет, сколько асинхронных запросов может быть запущенно параллельно.
По умолчанию 4.
Это количество должно рассматриваться с учетом размера пула соединений базы данных, сконфигурированного в database.yml. Пул соединений должен быть достаточно большим, чтобы вместить и основные треды (т.е. треды веб сервера или обработчика заданий), и фоновые треды.
Для каждого процесса Rails создает один глобальный исполнитель запросов, который использует указанное количество тредов для обработки асинхронных запросов. Таким образом, размер пула должен быть не менее thread_count + global_executor_concurrency + 1. Например, если ваш веб-сервер имеет максимум 3 треда, а global_executor_concurrency установлен в 4, то размер пула должен быть не менее 8.
config.active_record.yaml_column_permitted_classesПо умолчанию [Symbol]. Позволяет приложениям включать дополнительные разрешенные классы в safe_load() на ActiveRecord::Coders::YAMLColumn.
config.active_record.use_yaml_unsafe_loadПо умолчанию установлено false. Позволяет приложениям использовать метод unsafe_load в ActiveRecord::Coders::YAMLColumn.
config.active_record.raise_int_wider_than_64bitПо умолчанию установлено true. Определяет, следует ли вызывать исключение, когда адаптеру PostgreSQL передается целое число, которое больше, чем можно представить со знаком в 64 бита.
config.active_record.generate_secure_token_onОпределяет, когда генерировать значение для объявлений has_secure_token. По умолчанию, значение генерируется при инициализации модели:
class User < ApplicationRecord
has_secure_token
end
record = User.new
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
При использовании config.active_record.generate_secure_token_on = :create, значение будет генерироваться при создании модели:
# config/application.rb
config.active_record.generate_secure_token_on = :create
# app/models/user.rb
class User < ApplicationRecord
has_secure_token on: :create
end
record = User.new
record.token # => nil
record.save!
record.token # => "fwZcXX6SkJBJRogzMdciS7wf"
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :create |
| 7.1 | :initialize |
config.active_record.permanent_connection_checkoutОпределяет, должен ли ActiveRecord::Base.connection вызывать ошибку, вывести предупреждение об устаревании или не делать ничего.
В ActiveRecord::Base.connection происходит получение соединения с базой данных из пула и его удержание до завершения запроса или задачи. Такое поведение может быть нежелательным в средах, где используется гораздо больше тредов или файберов, чем доступно соединений.
Эта конфигурация может быть использована для обнаружения и устранения кода, который вызывает ActiveRecord::Base.connection. Такой код следует переписать на использование ActiveRecord::Base.with_connection.
Значение может быть установлено в :disallowed, :deprecated или true для, соответственно, вызова ошибки, вывода предупреждение или ничего.
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans и ActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleansРегулирует, должен ли Active Record рассматривать все столбцы tinyint(1) как boolean. По умолчанию true.
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tablesРегулирует, должны ли таблицы базы данных создаваться "нелогируемыми", что может ускорить быстродействие, но добавляет риск потери данных, если база данных ломается. Очень рекомендуется на включать это в среде production. По умолчанию false во всех средах.
Чтобы включить ее для тестов:
# config/environments/test.rb
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.create_unlogged_tables = true
end
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_typeУправляет встроенным типом, который должен использовать адаптер Active Record PostgreSQL при вызове datetime в миграции или схеме. Она принимает символ, который должен соответствовать одному из настроенных NATIVE_DATABASE_TYPES. По умолчанию :timestamp, что означает, что t.datetime в миграции создаст столбец "timestamp without time zone".
Чтобы использовать "timestamp with time zone":
# config/application.rb
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.datetime_type = :timestamptz
end
Если вы ее меняете, следует запустить bin/rails db:migrate, чтобы перестроить schema.rb.
ActiveRecord::SchemaDumper.ignore_tablesПринимает массив таблиц, которые не должны быть включены в любой генерируемый файл схемы.
ActiveRecord::SchemaDumper.fk_ignore_patternПозволяет настроить другое регулярное выражение, которое будет использоваться для определения того, следует ли выгружать имя внешнего ключа из db/schema.rb или нет. По умолчанию имена внешних ключей, начинающиеся с fk_rails_, не экспортируются в выгрузку схемы базы данных. По умолчанию используется /^fk_rails_[0-9a-f]{10}$/.
config.active_record.encryption.add_to_filter_parametersВключает автоматическую фильтрацию зашифрованных атрибутов при вызове метода inspect.
Значение по умолчанию true.
config.active_record.encryption.hash_digest_classУстанавливает алгоритм дайджеста, используемый Active Record Encryption.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | OpenSSL::Digest::SHA1 |
| 7.1 | OpenSSL::Digest::SHA256 |
config.active_record.encryption.support_sha1_for_non_deterministic_encryptionВключает поддержку расшифровки существующих данных, зашифрованных с помощью класса дайджеста SHA-1. При false поддерживается только дайджест, настроенный в config.active_record.encryption.hash_digest_class.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 7.1 | false |
config.active_record.protocol_adaptersПри использовании URL-адреса для настройки подключения к базе данных, этот параметр предоставляет сопоставление между протоколом и базовым адаптером базы данных. Например, среда может указать DATABASE_URL=mysql://localhost/database, и Rails сопоставит mysql с адаптером mysql2. Однако приложение также может переопределить эти сопоставления:
config.active_record.protocol_adapters.mysql = "trilogy"
Если сопоставления для указанного протокола не найдено, то сам протокол будет использован в качестве названия адаптера.
config.action_controller включает несколько конфигурационных настроек:
config.action_controller.asset_hostУстанавливает хост для ассетов. Полезна, когда для хостинга ассетов используются CDN, или когда вы хотите обойти встроенную в браузеры политику ограничения домена при использовании различных псевдонимов доменов.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :mailers |
| 6.1 | nil |
config.action_controller.perform_cachingКонфигурирует, должно ли приложение выполнять возможность кэширования, предоставленную компонентом Action Controller. Установлено false в среде development, true в production. Если не указано, значение по умолчанию всегда будет true.
config.action_controller.default_static_extensionКонфигурирует расширение, используемое для кэшированных страниц. По умолчанию .html.
config.action_controller.include_all_helpersУстанавливает, должны ли быть все хелперы вью доступны везде или только в соответствующем контроллере. Если установлен false, методы UsersHelper будут доступны только во вью, рендерящихся как часть UsersController. Если true, методы UsersHelper будут доступны везде. Поведением настройки по умолчанию (когда этой опции явно не установлено true или false) является то, что все хелперы вью доступны в каждом контроллере.
config.action_controller.loggerПринимает логгер, соответствующий интерфейсу Log4r или дефолтного класса Ruby Logger, который затем используется для логирования информации от Action Controller. Установите его в nil, чтобы отключить логирование.
config.action_controller.request_forgery_protection_tokenУстанавливает имя параметра токена для RequestForgery. Вызов protect_from_forgery по умолчанию устанавливает его в :authenticity_token.
config.action_controller.allow_forgery_protectionВключает или отключает защиту от CSRF. По умолчанию false в среде test и true в остальных средах.
config.action_controller.forgery_protection_origin_checkНастраивает, должен ли сверяться заголовок HTTP Origin с доменом сайта в качестве дополнительной защиты от межсайтовой подделки запроса.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.0 | true |
config.action_controller.per_form_csrf_tokensНастраивает, должны ли токены CSRF быть валидными только для метода/экшна, для которого они сгенерированы.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.0 | true |
config.action_controller.default_protect_from_forgeryОпределяет, будет ли добавлена защита от подделки в ActionController:Base.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.2 | true |
config.action_controller.relative_url_rootМожет использоваться, чтобы сообщить Rails, что деплой происходит в поддиректорию. По умолчанию config.relative_url_root.
config.action_controller.permit_all_parametersУстанавливает все параметры для массового назначения как разрешенные по умолчанию. Значение по умолчанию false.
config.action_controller.action_on_unpermitted_parametersУправляет поведением, когда обнаружены параметр, не разрешенные явно. Значение по умолчанию :log в средах test и development, в остальных false. Значениями могут быть:
false чтобы ничего не предпринимать
:log чтобы вызвать событие ActiveSupport::Notifications.instrument на тему unpermitted_parameters.action_controller, и логировать на уровне DEBUG
:raise чтобы вызвать исключение ActionController::UnpermittedParameters
config.action_controller.always_permitted_parameters
Устанавливает список разрешенных параметров, которые разрешены по умолчанию. Значениями по умолчанию являются ['controller', 'action'].
config.action_controller.enable_fragment_cache_loggingОпределяет, нужно ли логировать чтение и запись в кэш фрагментов в следующем расширенном формате:
Read fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/d0bdf2974e1ef6d31685c3b392ad0b74 (0.6ms)
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Write fragment views/v1/2914079/v1/2914079/recordings/70182313-20160225015037000000/3b4e249ac9d168c617e32e84b99218b5 (1.1ms)
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
По умолчанию установлено false, что выводит результаты следующим образом:
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
config.action_controller.raise_on_missing_callback_actionsВызывает AbstractController::ActionNotFound, когда экшн, указанный в опциях :only или :except колбэка, отсутствует в контроллере.
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true (development и test), false (другие env) |
config.action_controller.raise_on_open_redirectsЗащищает приложение от непреднамеренного перенаправления на внешний хост (также известного как "открытое перенаправление") с помощью явного согласия на внешние перенаправления.
При включении этой конфигурации (true) вызывается ActionController::Redirecting::UnsafeRedirectError, когда в метод redirect_to передается URL-адрес с внешним хостом. Если открытое перенаправление необходимо разрешить, то при вызове redirect_to можно добавить параметр allow_other_host: true.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.0 | true |
config.action_controller.log_query_tags_around_actionsОпределяет, будет ли автоматически обновлен контекст контроллера для тегов запроса с помощью around_filter. Значение по умолчанию true.
config.action_controller.wrap_parameters_by_defaultДо версии Rails 7.0 новые приложения создавались с инициализатором wrap_parameters.rb, который включал обертку параметров в ActionController::Base для JSON-запросов.
Установка этого значения конфигурации в true обеспечивает такое же поведение, как и инициализатор, позволяя приложениям удалять его, если они не хотят настраивать поведение обертки параметров.
Независимо от этого значения, приложения по-прежнему могут настраивать поведение обертки параметров, как и раньше, в инициализаторе или для каждого контроллера.
Более подробную информацию об упаковке параметров см. в документации по ParamsWrapper.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.0 | true |
ActionController::Base.wrap_parametersКонфигурирует ParamsWrapper. Он может быть вызван на верхнем уровне или на отдельных контроллерах.
config.action_dispatch.cookies_serializerУказывает, какой сериализатор использовать для куки. Принимает те же значения, что и config.active_support.message_serializer, плюс :hybrid, который псевдоним для :json_allow_marshal.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (original) | :marshal |
| 7.0 | :json |
config.action_dispatch.debug_exception_log_levelКонфигурирует уровень лога, используемый промежуточной программы ActionDispatch::DebugExceptions, при логировании не отловленных исключений в течение запросов.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (original) | :fatal |
| 7.1 | :error |
config.action_dispatch.default_headersЭто хэш с заголовками HTTP, которые по умолчанию устанавливаются для каждого отклика.
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | |
| 7.0 | |
| 7.1 | |
config.action_dispatch.default_charsetУказывает кодировку по умолчанию для всех рендеров. По умолчанию nil.
config.action_dispatch.tld_lengthУстанавливает длину TLD (домена верхнего уровня) для приложения. По умолчанию 1.
config.action_dispatch.ignore_accept_headerИспользуется для определения, нужно ли игнорировать заголовки accept запроса. По умолчанию false.
config.action_dispatch.x_sendfile_headerОпределяет специфичный для сервера заголовок X-Sendfile. Это полезно для ускоренной отдачи файлов с сервера. Например, можно установить 'X-Sendfile' для Apache.
config.action_dispatch.http_auth_saltУстанавливает значение соли HTTP Auth. По умолчанию 'http authentication'.
config.action_dispatch.signed_cookie_saltУстанавливает значение соли для подписанных куки. По умолчанию 'signed cookie'.
config.action_dispatch.encrypted_cookie_saltУстанавливает значение соли для зашифрованных куки. По умолчанию 'encrypted cookie'.
config.action_dispatch.encrypted_signed_cookie_saltУстанавливает значение соли для подписанных зашифрованных куки. По умолчанию 'signed encrypted cookie'.
config.action_dispatch.authenticated_encrypted_cookie_saltУстанавливает значение соли для аутентификационных зашифрованных куки. По умолчанию 'authenticated encrypted cookie'.
config.action_dispatch.encrypted_cookie_cipherУстанавливает алгоритм шифрования, который будет использоваться для зашифрованных куки. По умолчанию "aes-256-gcm".
config.action_dispatch.signed_cookie_digestУстанавливает дайджест, который будет использоваться для подписанных куки. По умолчанию "SHA1".
config.action_dispatch.cookies_rotationsПозволяет чередовать секреты, шифры и дайджесты для зашифрованных и подписанных куки.
config.action_dispatch.use_authenticated_cookie_encryptionОпределяет, используют подписанные и зашифрованные куки шифр AES-256-GCM или более старый шифр AES-256-CBC.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.2 | true |
config.action_dispatch.use_cookies_with_metadataВключает запись куки с включенными метаданными о назначении.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 6.0 | true |
config.action_dispatch.perform_deep_mungeКонфигурирует, должен ли применяться метод deep_munge на параметрах. Подробнее смотрите в руководстве Безопасность приложений на Rails. По умолчанию true.
config.action_dispatch.rescue_responsesОпределяет, какие исключения соответствуют какому HTTP-статусу. Она принимает хэш, в котором можно указать пары исключение/статус.
# Рекомендуется использовать #[]= или #merge! для сохранения значений по умолчанию
config.action_dispatch.rescue_responses['MyAuthenticationError'] = :unauthorized
Для просмотра конфигурации можно использовать ActionDispatch::ExceptionWrapper.rescue_responses. По умолчанию она определена как:
{
'ActionController::RoutingError' => :not_found,
'AbstractController::ActionNotFound' => :not_found,
'ActionController::MethodNotAllowed' => :method_not_allowed,
'ActionController::UnknownHttpMethod' => :method_not_allowed,
'ActionController::NotImplemented' => :not_implemented,
'ActionController::UnknownFormat' => :not_acceptable,
'ActionDispatch::Http::MimeNegotiation::InvalidType' => :not_acceptable,
'ActionController::MissingExactTemplate' => :not_acceptable,
'ActionController::InvalidAuthenticityToken' => :unprocessable_entity,
'ActionController::InvalidCrossOriginRequest' => :unprocessable_entity,
'ActionDispatch::Http::Parameters::ParseError' => :bad_request,
'ActionController::BadRequest' => :bad_request,
'ActionController::ParameterMissing' => :bad_request,
'Rack::QueryParser::ParameterTypeError' => :bad_request,
'Rack::QueryParser::InvalidParameterError' => :bad_request,
'ActiveRecord::RecordNotFound' => :not_found,
'ActiveRecord::StaleObjectError' => :conflict,
'ActiveRecord::RecordInvalid' => :unprocessable_entity,
'ActiveRecord::RecordNotSaved' => :unprocessable_entity
}
Любое ненастроенное исключение приведет к 500 Internal Server Error.
config.action_dispatch.cookies_same_site_protectionНастраивает значение по умолчанию атрибута SameSite при установке куки. Когда установлено nil, атрибут SameSite не будет добавляться. Чтобы разрешить значению атрибута SameSite быть динамически настраиваемым на основе запроса, может быть указан proc. Например:
config.action_dispatch.cookies_same_site_protection = ->(request) do
:strict unless request.user_agent == "TestAgent"
end
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | nil |
| 6.1 | :lax |
config.action_dispatch.ssl_default_redirect_statusНастраивает код статуса HTTP по умолчанию, используемый при перенаправлении не-GET/HEAD запросов от HTTP к HTTPS в промежуточной программе ActionDispatch::SSL.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | 307 |
| 6.1 | 308 |
config.action_dispatch.log_rescued_responsesВключает логирование необработанных исключений, настроенных в rescue_responses. По умолчанию true.
config.action_dispatch.show_exceptionsКонфигурация config.action_dispatch.show_exceptions управляет тем, как Action Pack (а точнее, промежуточная программа ActionDispatch::ShowExceptions) обрабатывает исключения, возникающие при ответе на запросы.
Значение :all настраивает Action Pack на перехват исключений и отрисовку соответствующих страниц ошибок. Например, Action Pack перехватит исключение ActiveRecord::RecordNotFound и отрисует содержимое файла public/404.html с кодом состояния 404 Not found.
Значение :rescueable настраивает Action Pack на перехват исключений, определенных в config.action_dispatch.rescue_responses, а все остальные - вызывать. Например, Action Pack перехватит ActiveRecord::RecordNotFound, но вызовет NoMethodError.
Значение :none настраивает Action Pack на вызов всех исключений.
:all - отображать страницы ошибок для всех исключений
:rescuable - отображать страницы ошибок для исключений, объявленных в config.action_dispatch.rescue_responses
:none - вызывать все исключения
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 7.1 | :all |
ActionDispatch::Callbacks.beforeПринимает блок кода для запуска до запроса.
ActionDispatch::Callbacks.afterПринимает блок кода для запуска после запроса.
config.action_view включает несколько конфигурационных настроек:
config.action_view.cache_template_loadingКонтролирует, будут ли шаблоны перезагружены при каждом запросе. Значение по умолчанию !config.enable_reloading.
config.action_view.field_error_procПредоставляет генератор HTML для отображения ошибок, приходящих от Active Model. Блок вычисляется в контексте шаблона Action View. По умолчанию:
Proc.new { |html_tag, instance| content_tag :div, html_tag, class: "field_with_errors" }
config.action_view.default_form_builderСообщает Rails, какой form builder использовать по умолчанию. По умолчанию это ActionView::Helpers::FormBuilder. Если хотите, чтобы после инициализации загружался ваш класс form builder (и, таким образом, перезагружался с каждым запросом в development), можно передать его как строку.
config.action_view.loggerПринимает логгер, соответствующий интерфейсу Log4r или классу Ruby по умолчанию Logger, который затем используется для логирования информации от Action View. Установите nil для отключения логирования.
config.action_view.erb_trim_modeОпределяет, должен ли определенный синтаксис ERB обрезать пробелы. По умолчанию '-', которая включает обрезку висячих пробелов и новых строчек при использовании <%= -%> или <%= =%>. Установка любого другого значения отключит поддержку обрезки.
config.action_view.frozen_string_literalКомпилирует шаблон ERB с волшебным комментарием # frozen_string_literal: true, что делает все литералы строки замороженными, что предохраняет от выделения памяти. Установите true, чтобы включить ее для всех вью.
config.action_view.embed_authenticity_token_in_remote_formsПозволяет установить поведение по умолчанию для authenticity_token в формах с remote: true. По умолчанию установлен false, что означает, что remote формы не включают authenticity_token, что полезно при фрагментарном кэшировании формы. Remote формы получают аутентификацию из тега meta, поэтому встраивание бесполезно, если, конечно, вы не поддерживаете браузеры без JavaScript. В противном случае можно либо передать authenticity_token: true как опцию для формы, либо установить эту настройку в true.
config.action_view.prefix_partial_path_with_controller_namespaceОпределяет должны ли партиалы искаться в поддиректории шаблонов для контроллеров в пространстве имен, или нет. Например, рассмотрим контроллер с именем Admin::ArticlesController, который рендерит этот шаблон:
<%= render @article %>
Настройка по умолчанию true, что использует партиал в /admin/articles/_article.erb. Установка значение в false будет рендерить /articles/_article.erb, что является тем же поведением, что и рендеринг из контроллера не в пространстве имен, такого как ArticlesController.
config.action_view.automatically_disable_submit_tagОпределяет, должен ли submit_tag автоматически отключаться при клике, это по умолчанию true.
config.action_view.debug_missing_translationОпределяет, должны ли ключи отсутствующих переводов оборачиваться в тег <span>. Это по умолчанию true.
config.action_view.form_with_generates_remote_formsОпределяет, должны ли form_with генерировать remote формы или нет.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| 5.1 | true |
| 6.1 | false |
config.action_view.form_with_generates_idsОпределяет, должны ли form_with генерировать ids на inputs.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.2 | true |
config.action_view.default_enforce_utf8Определяет, генерируются ли формы со скрытым тегом, который заставляет старые версии Internet Explorer отправлять формы, закодированные в UTF-8.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 6.0 | false |
config.action_view.image_loadingУказывает значение по умолчанию для атрибута loading тегов <img>, создаваемых хелпером image_tag. Например, когда установлено "lazy", теги <img>, создаваемые image_tag, будут включать loading="lazy", который информирует браузер подождать, пока изображение не окажется рядом с областью просмотра, чтобы загрузить его. (Это значение все еще может быть переопределено для изображения, передавая, например, loading: "eager" в image_tag.) По умолчанию nil.
config.action_view.image_decodingУказывает значение по умолчанию для атрибута decoding тегов <img>, создаваемых хелпером image_tag. По умолчанию nil.
config.action_view.annotate_rendered_view_with_filenamesОпределяет, должны ли отрендеренные вью аннотироваться именем файла шаблона. Это по умолчанию false.
config.action_view.preload_links_headerОпределяет, должны ли javascript_include_tag и stylesheet_link_tag генерировать заголовок Link, для предварительной загрузки ассетов.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | nil |
| 6.1 | true |
config.action_view.button_to_generates_button_tagКогда false, button_to будет отрисовывать <button> или <input> внутри <form> в зависимости от того, как передается содержимое (<form> опущен для краткости):
<%= button_to "Content", "/" %>
# => <input type="submit" value="Content">
<%= button_to "/" do %>
Content
<% end %>
# => <button type="submit">Content</button>
Установка этого значения в true заставляет button_to генерировать <button> внутри <form> в обоих случаях.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.0 | true |
config.action_view.apply_stylesheet_media_defaultОпределяет, должен ли stylesheet_link_tag отрисовывать screen как значение по умолчанию для атрибута media, когда он не предоставлен.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | true |
| 7.0 | false |
config.action_view.prepend_content_exfiltration_preventionОпределяет, должны ли хелперы form_tag и button_to производить теги HTML с предшествующим безопасным для браузера (но технически невалидным) HTML, гарантирующим, что их содержимое не сможет быть захвачен любыми предшествующими незакрытыми тегами. Значение по умолчанию false.
config.action_view.sanitizer_vendorКонфигурирует набор санитайзеров HTML, используемых Action View, устанавливая ActionView::Helpers::SanitizeHelper.sanitizer_vendor. Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию | Которое парсит разметку как |
|---|---|---|
| (изначально) | Rails::HTML4::Sanitizer |
HTML4 |
| 7.1 | Rails::HTML5::Sanitizer (смотрите NOTE) |
HTML5 |
Rails::HTML5::Sanitizer не поддерживается на JRuby, поэтому на платформах JRuby, Rails будет использовать Rails::HTML4::Sanitizer.
config.action_mailbox предоставляет следующие конфигурационные опции:
config.action_mailbox.loggerСодержит логгер, используемый Action Mailbox. Он принимает логгер, соответствующий интерфейсу Log4r или стандартного класса Ruby Logger. По умолчанию Rails.logger.
config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)
config.action_mailbox.incinerate_afterПринимает ActiveSupport::Duration, указывающий, через какое время после обработки ActionMailbox::InboundEmail записи должны быть уничтожены. По умолчанию 30.days.
# Уничтожить входяще письма через 14 дней после обработки.
config.action_mailbox.incinerate_after = 14.days
config.action_mailbox.queues.incinerationПринимает символ, указывающий очередь Active Job для использования для заданий уничтожения. Когда эта опция nil, задания уничтожения посылаются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name).
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :action_mailbox_incineration |
| 6.1 | nil |
config.action_mailbox.queues.routingПринимает символ, указывающий очередь Active Job для использования для заданий маршрутизации. Когда эта опция nil, задания маршрутизации посылаются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name).
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :action_mailbox_routing |
| 6.1 | nil |
Имеется несколько доступных настроек ActionMailer::Base:
config.action_mailer.asset_hostУстанавливает хост для ассетов. Полезно, когда для размещения ассетов используются CDN, а не сервер самого приложения. Следует использовать ее, если у вас другая конфигурация для Action Controller, в противном случае используйте config.asset_host.
config.action_mailer.loggerПринимает логгер, соответствующий интерфейсу Log4r или класса Ruby по умолчанию Logger, который затем используется для логирования информации от Action Mailer. Установите его в nil, чтобы отключить логирование.
config.action_mailer.smtp_settingsПозволяет детально сконфигурировать метод доставки :smtp. Она принимает хэш опций, который может включать любые из следующих опций:
:address - Позволяет использовать удаленный почтовый сервер. Просто измените его значение по умолчанию "localhost".
:port - В случае, если почтовый сервер не работает с портом 25, можно изменить это.
:domain - Если нужно определить домен HELO, это делается здесь.
:user_name - Если почтовый сервер требует аутентификацию, установите имя пользователя этой настройкой.
:password - Если почтовый сервер требует аутентификацию, установите пароль этой настройкой.
:authentication - Если почтовый сервер требует аутентификацию, здесь необходимо установить тип аутентификации. Это должен быть один из символов :plain, :login, :cram_md5.
:enable_starttls - Использовать STARTTLS при соединении с вашим сервером SMTP и выдавать ошибку, если не поддерживается. По умолчанию false.
:enable_starttls_auto - Определяет, включен ли STARTTLS на вашем сервере SMTP и начинает его использовать. По умолчанию true.
:openssl_verify_mode - При использовании TLS, можно установить, как OpenSSL проверяет сертификат. Это полезно, если необходимо валидировать самоподписанный и/или wildcard сертификат. Это может быть одна из констант проверки OpenSSL, :none или :peer -- или сама константа OpenSSL::SSL::VERIFY_NONE или OpenSSL::SSL::VERIFY_PEER, соответственно.
:ssl/:tls - Позволяет соединению SMTP использовать SMTP/TLS (SMTPS: SMTP поверх прямого соединения TLS).
:open_timeout - Количество секунд ожидания перед попыткой открыть соединение.
:read_timeout - Количество секунд ожидания до тайм-аута вызова read(2).
Кроме этого можно передавать любые поддерживаемые опции настройки Mail::SMTP.
config.action_mailer.smtp_timeoutДо версии 2.8.0 гем mail по умолчанию не устанавливал таймауты для SMTP-запросов. Эта конфигурация позволяет приложениям задавать значения по умолчанию для параметров :open_timeout и :read_timeout в геме mail, чтобы запросы не зависали бесконечно.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | nil |
| 7.1 | 5 |
config.action_mailer.sendmail_settingsПозволяет детально сконфигурировать метод доставки :sendmail. Она принимает хэш опций, который может включать любые из этих опций:
:location - Место расположения исполняемого файла sendmail. По умолчанию /usr/sbin/sendmail.
:arguments - Аргументы командной строки. По умолчанию %w[ -i ].
config.action_mailer.file_settingsОпределяет поведение метода доставки :file. Она принимает хэш с опциями, которые могут включать:
:location - Путь, куда будут сохраняться файлы. По умолчанию "#{Rails.root}/tmp/mails".
:extension - Расширение файла. По умолчанию пустая строка.
config.action_mailer.raise_delivery_errorsОпределяет, должна ли вызываться ошибка, если доставка письма не может быть завершена. По умолчанию true.
config.action_mailer.delivery_methodОпределяет метод доставки, по умолчанию :smtp. За подробностями обращайтесь к разделу по настройке в руководстве Основы Action Mailer
config.action_mailer.perform_deliveriesОпределяет, должна ли почта фактически доставляться. По умолчанию true; удобно установить ее false при тестировании.
config.action_mailer.default_optionsКонфигурирует значения по умолчанию Action Mailer. Используется для установки таких опций, как from илиreply_to для каждого рассыльщика. Эти значения по умолчанию следующие:
{
mime_version: "1.0",
charset: "UTF-8",
content_type: "text/plain",
parts_order: ["text/plain", "text/enriched", "text/html"]
}
Присвойте хэш для установки дополнительных опций:
config.action_mailer.default_options = {
from: "noreply@example.com"
}
config.action_mailer.observersРегистрирует обсерверы, которые будут уведомлены при доставке почты.
config.action_mailer.observers = ["MailObserver"]
config.action_mailer.interceptorsРегистрирует перехватчики, которые будут вызваны до того, как почта будет отослана.
config.action_mailer.interceptors = ["MailInterceptor"]
config.action_mailer.preview_interceptorsРегистрирует перехватчики, которые будут вызваны до того, как почта будет предварительно просмотрена.
config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]
config.action_mailer.preview_pathsОпределяет место расположения превью рассыльщика. Добавление путей к этой конфигурационной опции приведет к тому, что эти пути будут использоваться в поиске превью рассыльщика.
config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"
config.action_mailer.show_previewsВключает или отключает превью рассыльщика. По умолчанию true в development.
config.action_mailer.show_previews = false
config.action_mailer.perform_cachingУказывает, должно ли выполняться кэширование фрагментов для шаблонов рассыльщиков. Если не указано, значение по умолчанию всегда будет true.
config.action_mailer.deliver_later_queue_nameУказывает очередь Active Job для заданий доставки по умолчанию (смотрите config.action_mailer.delivery_job). Когда эта опция установлена nil, задания доставки направляются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name).
Классы рассыльщика могут переопределять ее, чтобы использовать другую очередь. Отметьте, что это только применимо при использовании задания доставки по умолчанию. Если рассыльщик использует произвольное задание, будет использована его очередь.
Обеспечьте, чтобы ваш адаптер Active Job также был настроен на обработку указанной очереди, иначе задания доставки могут быть молчаливо проигнорированы.
config.action_mailer.delivery_jobУказывает задание для доставки писем.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | ActionMailer::MailDeliveryJob |
| 6.0 | "ActionMailer::MailDeliveryJob" |
Имеется несколько конфигурационных настроек для Active Support:
config.active_support.bareВключает или отключает загрузку active_support/all при загрузке Rails. По умолчанию nil, что означает, что active_support/all загружается.
config.active_support.test_orderУстанавливает порядок, в котором выполняются тестовые случаи. Возможные значения :random и :sorted. По умолчанию :random.
config.active_support.escape_html_entities_in_jsonВключает или отключает экранирование сущностей HTML в сериализации JSON. По умолчанию true.
config.active_support.use_standard_json_time_formatВключает или отключает сериализацию дат в формат ISO 8601. По умолчанию true.
config.active_support.time_precisionУстанавливает точность значений времени, кодируемого в JSON. По умолчанию 3.
config.active_support.hash_digest_classПозволяет настроить класс дайджеста для генерации дайджестов для не конфиденциальных (non-sensitive) данных, таких как заголовок ETag.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | OpenSSL::Digest::MD5 |
| 5.2 | OpenSSL::Digest::SHA1 |
| 7.0 | OpenSSL::Digest::SHA256 |
config.active_support.key_generator_hash_digest_classПозволяет настройку класса дайджеста для использования в создании производных секретных данных от настроенных базовых, таких как зашифрованные куки.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | OpenSSL::Digest::SHA1 |
| 7.0 | OpenSSL::Digest::SHA256 |
config.active_support.use_authenticated_message_encryptionУказывает, следует ли использовать аутентификационное шифрование AES-256-GCM в качестве шифра по умолчанию для шифрования сообщений вместо AES-256-CBC.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.2 | true |
config.active_support.message_serializerУказывает сериализатор по умолчанию, используемый экземплярами ActiveSupport::MessageEncryptor и ActiveSupport::MessageVerifier. Чтобы сделать миграцию между сериализаторами проще, предоставленные сериализаторы включает механизм фолбэка для поддержки нескольких форматов десериализации:
| Сериализатор | Сериализует и десериализует | Фолбэк десериализации |
|---|---|---|
:marshal |
Marshal |
ActiveSupport::JSON, ActiveSupport::MessagePack |
:json |
ActiveSupport::JSON |
ActiveSupport::MessagePack |
:json_allow_marshal |
ActiveSupport::JSON |
ActiveSupport::MessagePack, Marshal |
:message_pack |
ActiveSupport::MessagePack |
ActiveSupport::JSON |
:message_pack_allow_marshal |
ActiveSupport::MessagePack |
ActiveSupport::JSON, Marshal |
Marshal это потенциальное направление атак десериализации в случаях, когда утек секрет подписания сообщения. Если возможно, выбирайте сериализатор, не поддерживающий Marshal.
Сериализаторы :message_pack и :message_pack_allow_marshal поддерживают некоторые типы Ruby, не поддерживаемые JSON, такие как Symbol. Они также предоставляют улучшенное быстродействие и меньший размер полезной нагрузки. Однако они требуют гема msgpack.
Каждый из вышеперечисленных сериализаторов сгенерируют уведомление о событии message_serializer_fallback.active_support, когда они отступают к альтернативному формату десериализации, позволяя отслеживать, как часто происходят такие фолбэки.
Альтернативно можно указать любой сериализатор, отвечающий на методы dump и load. Например:
config.active_support.message_serializer = YAML
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :marshal |
| 7.1 | :json_allow_marshal |
config.active_support.use_message_serializer_for_metadataКогда true, включает оптимизацию быстродействия, сериализующий совместно данные сообщения и метаданные. Это изменяет формат сообщения, таким образом сообщения, сериализованные таким способом, не смогут быть прочитаны старыми (< 7.1) версиями Rails. Однако, сообщения, использующие старый формат, все еще могут быть прочитаны, независимо от того, включена ли оптимизация.
The default value depends on the config.load_defaults target version:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true |
config.active_support.cache_format_versionУказывает, какую версию сериализации кэша использовать. Возможные значения 6.1, 7.0 и 7.1.
7.0 улучшает эффективность сериализации элементов кэша.
7.1 делает работу кэша еще более эффективной. Он позволяет обнаруживать устаревшие и несовпадающие по версии элементы кэша без необходимости их десериализации. Также добавлена оптимизация для хранения простых строковых значений, таких как фрагменты вью.
Все форматы полностью совместимы, что означает, что элементы кэша, написанные в одном формате, могут быть прочитаны с помощью другого формата. Это поведение упрощает миграцию между форматами без инвалидации всего кэша.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | 6.1 |
| 7.0 | 7.0 |
| 7.1 | 7.1 |
config.active_support.deprecationНастраивает поведение предупреждений об устаревании. Смотрите Deprecation::Behavior для описания доступных вариантов.
В файлах config/environments, сгенерированных по умолчанию, она установлена :log для development, :stderr для test, и опущена для production в пользу config.active_support.report_deprecations.
config.active_support.disallowed_deprecationНастраивает поведение неразрешенных предупреждений об устаревании. Смотрите Deprecation::Behavior для описания доступных вариантов.
В файлах config/environments, сгенерированных по умолчанию, она установлена :raise для development и test, и опущена для production в пользу config.active_support.report_deprecations.
config.active_support.disallowed_deprecation_warningsНастраивает предупреждения об устаревании, которые рассматриваются неразрешенными в приложении. Это позволяет, например, трактовать определенные устаревания как серьезные ошибки.
config.active_support.report_deprecationsПозволяет отключить все предупреждения об устаревании, включая неразрешенные устаревания, из устареваний приложения. Это включает все устаревания из Rails и других гемов, которые могут добавлять свои устаревания в коллекцию устареваний, но не могут предупредить все предупреждения об устаревании, эмитируемые из ActiveSupport::Deprecation
В файлах config/environments, сгенерированных по умолчанию, она установлена false для production.
config.active_support.isolation_levelКонфигурирует расположение большей части внутреннего состояния Rails. Если используете сервер или обработчик заданий, основанные на файберах (например, falcon), следует установить :fiber. В противном случае, лучше использовать расположение :thread. По умолчанию :thread.
config.active_support.executor_around_test_caseКонфигурирует тестовый набор, чтобы тестовые случаи оборачивались в Rails.application.executor.wrap. Это позволяет тестовым случаям вести себя приближенно к фактическому запросу или заданию. Некоторые особенности, которые обычно отключены в тесте, такие как кэш запросов Active Record и асинхронные запросы, будут тогда включены.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.0 | true |
ActiveSupport::Logger.silencerУстанавливают false, чтобы отключить возможность silence logging в блоке. По умолчанию true.
ActiveSupport::Cache::Store.loggerОпределяет логгер, используемый в операциях хранения кэша.
ActiveSupport.to_time_preserves_timezoneОпределяет, должен ли метод to_time сохранять сдвиг UTC его получателя. Если false, методы to_time конвертируют в сдвиг UTC локальной системы.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 5.0 | true |
ActiveSupport.utc_to_local_returns_utc_offset_timesНастраивает ActiveSupport::TimeZone.utc_to_local возвращать время со сдвигом UTC, вместо времени UTC, включающего этот сдвиг.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 6.1 | true |
config.active_support.raise_on_invalid_cache_expiration_timeОпределяет, должен ли быть вызван ArgumentError, если у Rails.cache в fetch или write дается невалидное время expires_at или expires_in.
Опции true и false. Если false, исключение будет помечено как handled, и вместо этого логировано.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.1 | true |
config.active_job предоставляет следующие конфигурационные опции:
config.active_job.queue_adapterУстанавливает адаптер для бэкенда очередей. По умолчанию адаптер :async. Актуальный список встроенных адаптеров смотрите в документации ActiveJob::QueueAdapters API.
# Убедитесь, что гем адаптера есть в вашем Gemfile
# и следуйте определенным инструкция по установке
# и деплою.
config.active_job.queue_adapter = :sidekiq
config.active_job.default_queue_nameМожет быть использована для того, чтобы изменить название очереди по умолчанию. По умолчанию это "default".
config.active_job.default_queue_name = :medium_priority
config.active_job.queue_name_prefixПозволяет установить опциональный непустой префикс к названию очереди для всех заданий. По умолчанию пустой и не используется.
Со следующей настройкой задания будут добавляться в очередь production_high_priority, при запуске в production:
config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base
queue_as :high_priority
#....
end
config.active_job.queue_name_delimiterИмеет значение по умолчанию '_'. Если queue_name_prefix установлена, тогда queue_name_delimiter соединяет префикс и название очереди без префикса.
Со следующей настройкой задания будут добавлять в очередь video_server.low_priority:
# префикс должен быть установлен для использования разделителя
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
queue_as :low_priority
#....
end
config.active_job.enqueue_after_transaction_commitУправляет тем, должна ли методы Active Job #perform_later и подобные автоматически откладывать постановку задачи в очередь до момента завершения текущей транзакции Active Record.
Доступны следующие значения:
:never - Никогда не откладывать постановку в очередь.
:always - Всегда откладывать постановку в очередь.
:default - Позволить адаптеру очереди определить поведение.
Бэкенды Active Job, которые используют ту же базу данных, что и Active Record, в качестве очереди, обычно должны не откладывать, тогда как другие бэкенды должны разрешать это.
Пример:
Topic.transaction do
topic = Topic.create(title: "New Topic")
NewTopicNotificationJob.perform_later(topic)
end
В этом примере, если конфигурация установлена на :never, задача будет поставлена в очередь немедленно, даже если объект Topic еще не сохранен. Из-за этого, если задача будет взята в работу практически сразу, или если транзакция по какой-то причине не будет успешна, задача не сможет найти этот объект Topic в базе данных.
Если же установлена на :always, задача будет поставлена в очередь только после того, как транзакция будет успешно завершена. Если транзакция будет отменена, задача вообще не будет поставлена в очередь.
Кроме того, эту конфигурацию можно устанавливать индивидуально для каждого класса задач:
class SomeJob < ApplicationJob
self.enqueue_after_transaction_commit = :never
end
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :never |
| 7.2 | :default |
config.active_job.loggerПринимает логгер, соответствующий интерфейсу Log4r или дефолтного класса Ruby Logger, который затем используется для логирования информации от Action Job. Вы можете получить этот логгер вызвав logger в классе Active Job или экземпляре Active Job. Установите его в nil, чтобы отключить логирование.
config.active_job.custom_serializersПозволяет устанавливать собственные сериализаторы аргументов. По умолчанию используется [].
config.active_job.log_argumentsУправляет, логировать ли аргументы задания. По умолчанию true.
config.active_job.verbose_enqueue_logsУказывает, должны ли расположения исходника методов, запускающие фоновые задания, логироваться ниже строчек лога соответственного запуска. По умолчанию флажок true в development и false во всех других средах.
config.active_job.retry_jitterУправляет количеством "jitter" (случайного распределения), применяемого к задержке, вычисляемой при повторе упавших заданий.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | 0.0 |
| 6.1 | 0.15 |
config.active_job.log_query_tags_around_performОпределяет, будет ли автоматически обновлен контекст задания для тегов запроса с помощью around_perform. Значение по умолчанию true.
config.action_cable.urlПринимает строку с URL, на котором размещается ваш сервер Action Cable. Следует использовать эту опцию, если вы запускаете серверы Action Cable отдельно от основного приложения.
config.action_cable.mount_pathПринимает строку, куда монтировать Action Cable, как часть процесса основного сервера. По умолчанию /cable. Ей можно указать nil, чтобы не монтировать Action Cable как часть вашего обычного сервера Rails.
Конфигурационные опции описаны подробнее в Обзор Action Cable.
config.action_cable.precompile_assetsОпределяет, должны ли ассеты Action Cable быть добавлены в прекомпиляцию конвейера ресурсов. Ничего не делает, если не используется Sprockets. Значение по умолчанию true.
config.active_storage предоставляет следующие опции конфигурации:
config.active_storage.variant_processorПринимает символ :mini_magick или :vips, указывая, будут ли варианты преобразования выполняться с помощью MiniMagick или ruby-vips.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | :mini_magick |
| 7.0 | :vips |
config.active_storage.analyzersПринимает массив классов, указывающий анализаторы, доступные для бинарных объектов в Active Storage. По умолчанию определен как:
config.active_storage.analyzers = [ActiveStorage::Analyzer::ImageAnalyzer::Vips, ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick, ActiveStorage::Analyzer::VideoAnalyzer, ActiveStorage::Analyzer::AudioAnalyzer]
Анализатор изображения может извлекать ширину и высоту бинарного объекта изображения; анализатор видео может извлекать ширину, высоту, длительность, угол и соотношение сторон бинарного объекта видео; анализатор аудио может извлекать продолжительность и битрейт бинарного объекта аудио.
config.active_storage.previewersПринимает массив классов, указывающий на средства предварительного просмотра изображений, доступные для бинарных объектов в Active Storage. По умолчанию определен как:
config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]
PopplerPDFPreviewer и MuPDFPreviewer могут генерировать миниатюру из первой страницы бинарного объекта PDF; VideoPreviewer из соответствующего кадра бинарного объекта видео.
config.active_storage.pathsПринимает хэш опций, с указанием мест расположения команд средств предварительного просмотра/анализатора. По умолчанию используется {}, что означает, что команды будут искать по дефолтному пути. Можно включить любую из следующих опций:
:ffprobe - Место расположения исполняемого ffprobe.
:mutool - Место расположения исполняемого mutool.
:ffmpeg - Место расположения исполняемого ffmpeg.
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'
config.active_storage.variable_content_typesПринимает массив строк, указывающий типы содержимого, которые Active Storage может преобразовывать через процессор варианта. По умолчанию определен как:
config.active_storage.variable_content_types = %w(image/png image/gif image/jpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon image/webp image/avif image/heic image/heif)
config.active_storage.web_image_content_typesПринимает массив строк, рассматриваемый в качестве типов содержимого веб изображений, для которых варианты могут быть обработаны без конвертации в формат PNG. Например, если вы хотите использовать варианты AVIF в своем приложении, вы можете добавить image/avif в этот массив.
The default value depends on the config.load_defaults target version:
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| 6.0 | %w(image/png image/jpeg image/gif) |
| 7.2 | %w(image/png image/jpeg image/gif image/webp) |
config.active_storage.content_types_to_serve_as_binaryПринимает массив строк, указывающий типы содержимого, которые Active Storage всегда будет отдавать в качестве прикрепленного файла, а не встроенного. По умолчанию определен как:
config.active_storage.content_types_to_serve_as_binary = %w(text/html image/svg+xml application/postscript application/x-shockwave-flash text/xml application/xml application/xhtml+xml application/mathml+xml text/cache-manifest)
config.active_storage.content_types_allowed_inlineПринимает массив строк, указывающий типы содержимого, которые Active Storage всегда будет отдавать в качестве встроенного файла. По умолчанию определен как:
config.active_storage.content_types_allowed_inline = %w(image/webp image/avif image/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)
config.active_storage.queues.analysisПринимает символ, указывающий очередь Active Job для использования заданиями анализа. Когда эта опция nil, задания анализа направляются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name).
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| 6.0 | :active_storage_analysis |
| 6.1 | nil |
config.active_storage.queues.mirrorПринимает символ, указывающий на очередь Active Job, которая будет использоваться для фоновых задач прямого зеркалирования файлов. Если эта опция равна nil, то задачи зеркалирования отправляются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name). Значение по умолчанию nil.
config.active_storage.queues.preview_imageПринимает символ, указывающий на очередь Active Job, которая будет использоваться для фоновых задач предварительной обработки изображений. Если эта опция равна nil, то задачи зеркалирования отправляются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name). Значение по умолчанию nil.
config.active_storage.queues.purgeПринимает символ, указывающий очередь Active Job для использования заданиями очистки. Когда эта опция nil, задания очистки направляются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name).
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| 6.0 | :active_storage_purge |
| 6.1 | nil |
config.active_storage.queues.transformПринимает символ, указывающий на очередь Active Job, которая будет использоваться для фоновых задач предварительной обработки вариантов. Если эта опция равна nil, то задачи зеркалирования отправляются в очередь Active Job по умолчанию (смотрите config.active_job.default_queue_name). Значение по умолчанию nil.
config.active_storage.loggerМожет быть использован для установки логгера, используемого Active Storage. Принимает логгер, соответствующий интерфейсу Log4r или дефолтному классу Logger в Ruby.
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
config.active_storage.service_urls_expire_inОпределяет срок действия по умолчанию для URL, генерируемых с помощью:
ActiveStorage::Blob#url
ActiveStorage::Blob#service_url_for_direct_upload
ActiveStorage::Preview#url
ActiveStorage::Variant#url
По умолчанию 5 минут.
config.active_storage.urls_expire_inОпределяет срок действия по умолчанию для URL в приложении Rails, генерируемых с помощью Active Storage. По умолчанию nil.
config.active_storage.touch_attachment_recordsУказывает ActiveStorage::Attachments обновлять связанную запись при изменении. По умолчанию true.
config.active_storage.routes_prefixМожет быть использована для установки префикса маршрута для маршрутов, обслуживаемых Active Storage. Принимает строку, с которой будут начинаться генерируемые маршруты.
config.active_storage.routes_prefix = '/files'
По умолчанию /rails/active_storage.
config.active_storage.track_variantsОпределяет, должны ли варианты записываться в базу данных.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 6.1 | true |
config.active_storage.draw_routesМожет быть использована, чтобы включить генерацию маршрутов Active Storage. По умолчанию true.
config.active_storage.resolve_model_to_routeМожет быть использована для глобального изменения, как загружаются файлы Active Storage.
Допустимые значения:
:rails_storage_redirect: Перенаправляет на подписанный короткоживущий URL сервиса.
:rails_storage_proxy: Проксирует файлы, загружая их.
По умолчанию :rails_storage_redirect.
config.active_storage.video_preview_argumentsМожет быть использована для изменения способа, которым ffmpeg генерирует изображения предпросмотра видео.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | "-y -vframes 1 -f image2" |
| 7.0 | "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015)"1 + ",loop=loop=-1:size=2,trim=start_frame=1'"2+ " -frames:v 1 -f image2"
|
config.active_storage.multiple_file_field_include_hiddenВ Rails 7.1 и выше, отношения Active Storage has_many_attached по умолчанию будут заменять текущую коллекцию, вместо добавления к ней. Поэтому, для поддержки отправки пустой коллекции, когда multiple_file_field_include_hidden true, хелпер file_field отрендерит вспомогательное скрытое поле, похожее на вспомогательное поле, отрендеренное хелпером check_box.
Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию |
|---|---|
| (изначально) | false |
| 7.0 | true |
config.active_storage.precompile_assetsОпределяет, должны ли ассеты Active Storage быть добавлены в прекомпиляцию конвейера ресурсов. Ничего не делает, если не используется Sprockets. Значение по умолчанию true.
config.action_text.attachment_tag_nameПринимает строку для тега HTML, используемого для оборачивания вложений. По умолчанию "action-text-attachment".
config.action_text.sanitizer_vendorКонфигурирует санитайзер HTML, используемого Action Text, устанавливая ActionText::ContentHelper.sanitizer экземпляр класса, возвращающийся из внешнего метода .safe_list_sanitizer. Значение по умолчанию зависит от целевой версии config.load_defaults:
| Начиная с версии | Значение по умолчанию | Которое парсит разметку как |
|---|---|---|
| (изначально) | Rails::HTML4::Sanitizer |
HTML4 |
| 7.1 | Rails::HTML5::Sanitizer (смотрите NOTE) |
HTML5 |
Rails::HTML5::Sanitizer не поддерживается на JRuby, поэтому на платформах JRuby, Rails будет использовать Rails::HTML4::Sanitizer.
Почти каждое приложение на Rails взаимодействует с базой данных. Можно подключаться к базе данных с помощью установки переменной окружения ENV['DATABASE_URL'] или с помощью использования файла config/database.yml.
При использовании файла config/database.yml можно указать всю информацию, необходимую для доступа к базе данных:
development:
adapter: postgresql
database: blog_development
pool: 5
Это будет подключаться к базе данных по имени blog_development при помощи адаптера postgresql. Та же самая информация может быть сохранена в URL и предоставлена с помощью переменной среды следующим образом:
ENV['DATABASE_URL'] # => "postgresql://localhost/blog_development?pool=5"
Файл config/database.ymlсодержит разделы для трех различных сред, в которых по умолчанию может быть запущен Rails:
development используется на вашем компьютере для разработки или локальном компьютере для того, чтобы вы могли взаимодействовать с приложением.
test используется при запуске автоматических тестов.
production используется, когда вы развертываете свое приложение во всемирной сети для использования.
Если хотите, можно указать URL внутри config/database.yml
development:
url: postgresql://localhost/blog_development?pool=5
Файл config/database.yml может содержать теги ERB <%= %>. Все внутри тегов будет вычислено как код Ruby. Это можно использовать для вставки данных из переменных среды или для выполнения вычислений для генерации необходимой информации о соединении.
При использовании ENV['DATABASE_URL'] или ключа url в файле config/database.yml Rails позволяет сопоставлять протокол в URL с адаптером базы данных, который можно настроить изнутри приложения. Это позволяет настраивать адаптер без изменения URL, установленного в среде развертывания. Подробнее смотрите: config.active_record.protocol_adapters.
Вам не нужно обновлять конфигурации баз данных вручную. Если взглянете на опции генератора приложения, то увидите, что одна из опций называется --database. Эта опция позволяет выбрать адаптер из списка наиболее часто используемых реляционных баз данных. Можно даже запускать генератор неоднократно: cd .. && rails new blog --database=mysql. После того, как подтвердите перезапись config/database.yml, ваше приложение станет использовать MySQL вместо SQLite. Подробные примеры распространенных соединений с базой данных указаны ниже.
Так как существует два способа настройки соединения (с помощью config/database.yml или с помощью переменной среды), важно понять, как они могут взаимодействовать.
Если имеется пустой файл config/database.yml, но существует ENV['DATABASE_URL'], Rails соединится с базой данных с помощью переменной среды:
$ cat config/database.yml
$ echo $DATABASE_URL
postgresql://localhost/my_database
Если имеется config/database.yml, но нет ENV['DATABASE_URL'], тогда для соединения с базой данных будет использован этот файл:
$ cat config/database.yml
development:
adapter: postgresql
database: my_database
host: localhost
$ echo $DATABASE_URL
Если имеется и config/database.yml, и ENV['DATABASE_URL'], Rails будет объединять конфигурации вместе. Чтобы лучше понять, обратимся к примерам.
При дублирующей информации о соединении, приоритет имеет переменная среды:
$ cat config/database.yml
development:
adapter: sqlite3
database: NOT_my_database
host: localhost
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost"}
@url="postgresql://localhost/my_database">
]
Здесь адаптер, хост и база данных соответствуют информации в ENV['DATABASE_URL'].
Если предоставлена недублирующая информация, вы получите все уникальные значения, в случае любых конфликтов переменная среды также имеет приоритет.
$ cat config/database.yml
development:
adapter: sqlite3
pool: 5
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"postgresql", "database"=>"my_database", "host"=>"localhost", "pool"=>5}
@url="postgresql://localhost/my_database">
]
Поскольку pool не содержится в предоставленной информации о соединении в ENV['DATABASE_URL'], его информация объединяется. Так как adapter дублирован, информация о соединении взята из ENV['DATABASE_URL'].
Единственных способ явно не использовать информацию о соединении из ENV['DATABASE_URL'], это определить явный URL соединения с использованием ключа "url":
$ cat config/database.yml
development:
url: sqlite3:NOT_my_database
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations.inspect'
#<ActiveRecord::DatabaseConfigurations:0x00007fc8eab02880 @configurations=[
#<ActiveRecord::DatabaseConfigurations::UrlConfig:0x00007fc8eab020b0
@env_name="development", @spec_name="primary",
@config={"adapter"=>"sqlite3", "database"=>"NOT_my_database"}
@url="sqlite3:NOT_my_database">
]
Тут игнорируется информация о соединении из ENV['DATABASE_URL'].
Так как возможно встроить ERB в config/database.yml, хорошей практикой является явно показать, что вы используете ENV['DATABASE_URL'] для соединения с вашей базой данных. Это особенно полезно в production, так как вы не должны показывать секреты, такие как пароль от базы данных, в системе управления версиями (такой как Git).
$ cat config/database.yml
production:
url: <%= ENV['DATABASE_URL'] %>
Теперь поведение понятное, что мы используем только информацию о соединении из ENV['DATABASE_URL'].
В Rails есть встроенная поддержка SQLite3, являющейся легким несерверным приложением по управлению базами данных. Хотя нагруженная среда production может перегрузить SQLite, она хорошо работает для разработки и тестирования. Rails при создании нового проекта использует базу данных SQLite, но вы всегда можете изменить это позже.
Вот раздел дефолтного конфигурационного файла (config/database.yml) с информацией о соединении для среды development:
development:
adapter: sqlite3
database: storage/development.sqlite3
pool: 5
timeout: 5000
В этом руководстве мы используем базу данных SQLite3 для хранения данных, поскольку эта база данных работает с нулевыми настройками. Rails также поддерживает MySQL (включая MariaDB) и PostgreSQL "из коробки", и имеет плагины для многих СУБД. Если вы уже используете базу данных в работе, в Rails скорее всего есть адаптер для нее.
Если вы выбрали MySQL или MariaDB вместо SQLite3, ваш config/database.yml будет выглядеть немного по-другому. Вот раздел development:
development:
adapter: mysql2
encoding: utf8mb4
database: blog_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
Если в вашей базе для разработки есть пользователь root с пустым паролем, эта конфигурация у вас заработает. В противном случае измените username и password в разделе development на правильные.
Если версия MySQL 5.5 или 5.6, и вы хотите использовать кодировку utf8mb4 по умолчанию, настройте ваш сервер MySQL, чтобы он поддерживал более длинные префиксы ключей, включив системную переменную innodb_large_prefix.
Advisory Locks в MySQL по умолчанию включены и используются, чтобы сделать миграции базы данных безопасными. Их можно отключить, установив advisory_locks в false:
production:
adapter: mysql2
advisory_locks: false
Если вы выбрали PostgreSQL, ваш config/database.yml будет модифицирован для использования базы данных PostgreSQL:
development:
adapter: postgresql
encoding: unicode
database: blog_development
pool: 5
По умолчанию Active Record использует особенности базы данных, такие как prepared statements и advisory locks. Вам может потребоваться отключить эти особенности, если вы используете внешний пул соединения, такой как PgBouncer:
production:
adapter: postgresql
prepared_statements: false
advisory_locks: false
Если включены, Active Record по умолчанию создаст до 1000 prepared statements на соединение с базой данных. Чтобы модифицировать это поведение, можно установить statement_limit в другое значение:
production:
adapter: postgresql
statement_limit: 200
Чем больше используется prepared statements, тем больше нужно памяти вашей базе данных. Если ваша база данных PostgreSQL достигает лимитов памяти, попробуйте снизить statement_limit или отключить prepared statements.
Если вы выбрали SQLite3 и используете JRuby, ваш config/database.yml будет выглядеть немного по-другому. Вот раздел development:
development:
adapter: jdbcsqlite3
database: storage/development.sqlite3
Если вы выбрали MySQL или MariaDB и используете JRuby, ваш config/database.yml будет выглядеть немного по-другому. Вот раздел development:
development:
adapter: jdbcmysql
database: blog_development
username: root
password:
Если вы выбрали PostgreSQL и используете JRuby, ваш config/database.yml будет выглядеть немного по-другому. Вот раздел development:
development:
adapter: jdbcpostgresql
encoding: unicode
database: blog_development
username: blog
password:
Измените username и password в разделе development на правильные.
По умолчанию Rails будет хранить информацию о среде и схеме Rails в служебной таблице по имени ar_internal_metadata.
Чтобы отключить это для соединения, установите use_metadata_table в конфигурации базы данных. Это полезно при работе с совместной базой данных и/или пользователем базы данных, который не может создавать таблицы.
development:
adapter: postgresql
use_metadata_table: false
По умолчанию Rails автоматически повторно соединиться к серверу базы данных и повторно попытается выполнить определенные запросы, если что-то пойдет не так. Будут повторены только безопасные (идемпотентные) запросы. Количество повторов можно указать в конфигурации базы данных с помощью connection_retries или отключить, установив значение в 0. Количество повторов по умолчанию 1.
development:
adapter: mysql2
connection_retries: 3
Конфигурация базы данных также позволяет настроить retry_deadline. Если установлен retry_deadline, запрос, подлежащий повтору, не будет повторен, если прошло указанное время с первой попытки. Например, retry_deadline в 5 секунд означает, что если прошло 5 секунд с момента первой попытки запроса, мы не повторим запрос, даже если он идемпотентный и остались connection_retries.
Это значение по умолчанию nil, что означает, что все запросы, подлежащие повтору, повторяются, независимо от пройденного времени. Значение для этой конфигурации должно быть указано в секундах.
development:
adapter: mysql2
retry_deadline: 5 # Остановить повтор запросов через 5 секунд
По умолчанию Rails автоматически кэширует результирующие множества, возвращаемые запросами. Если Rails снова встречается с тем же SQL запросом для того же http запроса или задания, он использует кэшированный результат вместо запуска запроса к базе данных снова.
Кэш запросов хранится в памяти и, чтобы избежать использования слишком много памяти, он автоматически удаляет самые давно использованные запросы при достижении порога. По умолчанию порог 100, но может быть настроен в database.yml.
development:
adapter: mysql2
query_cache: 200
Чтобы полностью отключить кэширование запросов, можно установить false
development:
adapter: mysql2
query_cache: false
По умолчанию Rails поставляется с тремя средами: "development", "test" и "production". Хотя в большинстве случаев их достаточно, бывают условия, когда нужно больше сред.
Представим, что у вас есть сервер, отражающий среду production, но используемый только для тестирования. Такой сервер обычно называется "staging server". Для определения среды с именем "staging" для этого сервера, просто создайте файл с именем config/environments/staging.rb. Так как это среда наподобие production, можно скопировать содержимое config/environments/production.rb в качестве начальной точки и сделать необходимые изменения там. Также возможно затребовать и расширить другие конфигурации среды, наподобие:
# 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?, и т.д.
По умолчанию Rails ожидает, что ваше приложение запускается в корне (т.е. /). Этот раздел объяснит, как запустить ваше приложение внутри директории.
Допустим, мы хотим задеплоить наше приложение в "/app1". Rails необходимо знать эту директорию для генерации подходящих маршрутов:
config.relative_url_root = "/app1"
альтернативно можно установить переменную среды RAILS_RELATIVE_URL_ROOT.
Теперь Rails будет добавлять "/app1" в начало каждой сгенерированной ссылки.
В Passenger запустить приложение в поддиректории просто. Подходящую конфигурацию можно найти в руководстве по Passenger.
Размещение вашего приложения с использованием обратного прокси имеет определенные преимущества перед традиционным размещением. Они позволяют больше контролировать ваш сервер, располагая по слоям компоненты, требуемые вашему приложению.
Многие веб-серверы могут быть использованы в качестве прокси сервера для балансировки сторонних элементов, таких как кэширующие сервера или сервера приложений.
Одним из таких серверов приложений является Unicorn, запущенный за обратным прокси.
В этом случае необходимо настроить прокси сервер (NGINX, Apache и т.д.) принимать соединения из вашего сервера приложения (Unicorn). По умолчанию Unicorn будет слушать соединения TCP на 8080 порту, но можно изменить порт, или настроить использование сокетов.
Можно найти подробности в Unicorn readme и понять лежащую в основе философию.
Как только вы настроили сервер приложения, необходимо проксировать запросы к нему, настроив надлежащим образом веб-сервер. Например, ваш конфиг NGINX может включать:
upstream application_server {
server 0.0.0.0:8080;
}
server {
listen 80;
server_name localhost;
root /root/path/to/your_app/public;
try_files $uri/index.html $uri.html @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://application_server;
}
# прочая конфигурация
}
Прочитайте актуальную информацию в документации NGINX.
Некоторые части Rails также могут быть сконфигурированы извне, предоставив переменные среды. Следующие переменные среды распознаются различными частями Rails:
ENV["RAILS_ENV"] определяет среду Rails (production, development, test и так далее), под которой будет запущен Rails.
ENV["RAILS_RELATIVE_URL_ROOT"] используется кодом роутинга для распознания URL при деплое вашего приложение в поддиректории.
ENV["RAILS_CACHE_ID"] и ENV["RAILS_APP_VERSION"] используются для генерация расширенных ключей кэша в коде кэширования Rails. Это позволит иметь несколько отдельных кэшей в одном и том же приложении.
После загрузки фреймворка и любых гемов в вашем приложении, Rails приступает к загрузке инициализаторов. Инициализатор это любой файл с кодом ruby, хранящийся в /config/initializers вашего приложения. Инициализаторы могут использоваться для хранения конфигурационных настроек, которые должны быть выполнены после загрузки фреймворков и гемов, таких как опции для конфигурирования настроек для этих частей.
Файлы в config/initializers (и любых поддиректориях config/initializers) упорядочиваются и загружаются один за другим как часть инициализатора load_config_initializers.
Если в инициализаторе есть код, полагающийся на код другого инициализатора, можно объединить их в один инициализатор. Это сделает эти зависимости более явными, и может помочь выявить новые концепции для вашего приложения. Rails также поддерживает нумерацию имен файлов инициализаторов, но это может привести к запутанности имен файлов. Явная загрузка инициализаторов с помощью require не рекомендуется, так как это вызовет повторную загрузку этого инициализатора.
Не гарантируется, что ваши инициализаторы будут запущены после всех инициализаторов гемов, поэтому любой код инициализатора, зависящий от инициализации какого-либо гема, должен быть помещен в блок config.after_initialize.
Во время загрузки приложения на код Rails часто идут ссылки. Rails управляет порядком загрузки этих фреймворков, поэтому преждевременная загрузка таких фреймворков, как ActiveRecord::Base, нарушает неявное соглашение между вашим приложением и Rails. Более того, загрузка кода вроде ActiveRecord::Base при старте приложения приводит к загрузке всего фреймворка, что может замедлить запуск и вызвать конфликты с порядком загрузки и инициализацией приложения.
Хуки загрузки и конфигурации - это API, позволяющее вам вмешаться в процесс инициализации без нарушения соглашения о загрузке с Rails. Это также поможет избежать снижения производительности при запуске и конфликтов.
Поскольку Ruby - динамический язык, некоторый код может привести к загрузке различных фреймворков Rails. Рассмотрим следующий фрагмент:
ActiveRecord::Base.include(MyActiveRecordHelper)
Этот фрагмент означает, что при загрузке этого файла он столкнется с ActiveRecord::Base. Эта встреча заставляет Ruby искать определение этой константы и загрузить его. Из-за этого при запуске загружается весь фреймворк Active Record.
ActiveSupport.on_load - это механизм, который можно использовать для отсрочки загрузки кода до тех пор, пока он действительно понадобится. Вышеприведенный фрагмент можно изменить следующим образом:
ActiveSupport.on_load(:active_record) do
include MyActiveRecordHelper
end
Этот новый фрагмент включит MyActiveRecordHelper только при загрузке ActiveRecord::Base.
В Rails эти хуки вызываются при загрузке определенной библиотеки. Например, при загрузке ActionController::Base вызывается хук :action_controller_base. Это означает, что все вызовы ActiveSupport.on_load с хуками :action_controller_base будут вызваны в контексте ActionController::Base (то есть self будет объектом ActionController::Base).
Обычно модифицировать код довольно просто. Если у вас есть строка кода, которая ссылается на фреймворк Rails, такой как ActiveRecord::Base, вы можете обернуть этот код в хук загрузки.
Изменение вызовов include
ActiveRecord::Base.include(MyActiveRecordHelper)
станет
ActiveSupport.on_load(:active_record) do
# self тут ссылается на ActiveRecord::Base,
# поэтому можно вызвать .include
include MyActiveRecordHelper
end
Изменение вызовов prepend
ActionController::Base.prepend(MyActionControllerHelper)
станет
ActiveSupport.on_load(:action_controller_base) do
# self тут ссылается на ActiveRecord::Base,
# поэтому можно вызвать .prepend
prepend MyActionControllerHelper
end
Изменение вызовов методов класса
ActiveRecord::Base.include_root_in_json = true
станет
ActiveSupport.on_load(:active_record) do
# self тут ссылается на ActiveRecord::Base
self.include_root_in_json = true
end
Ниже приведены хуки загрузки, которые вы можете использовать в своем коде. Чтобы подключиться к процессу инициализации одного из следующих классов, используйте соответствующий хук.
| Класс | Хук |
|---|---|
ActionCable |
action_cable |
ActionCable::Channel::Base |
action_cable_channel |
ActionCable::Connection::Base |
action_cable_connection |
ActionCable::Connection::TestCase |
action_cable_connection_test_case |
ActionController::API |
action_controller_api |
ActionController::API |
action_controller |
ActionController::Base |
action_controller_base |
ActionController::Base |
action_controller |
ActionController::TestCase |
action_controller_test_case |
ActionDispatch::IntegrationTest |
action_dispatch_integration_test |
ActionDispatch::Response |
action_dispatch_response |
ActionDispatch::Request |
action_dispatch_request |
ActionDispatch::SystemTestCase |
action_dispatch_system_test_case |
ActionMailbox::Base |
action_mailbox |
ActionMailbox::InboundEmail |
action_mailbox_inbound_email |
ActionMailbox::Record |
action_mailbox_record |
ActionMailbox::TestCase |
action_mailbox_test_case |
ActionMailer::Base |
action_mailer |
ActionMailer::TestCase |
action_mailer_test_case |
ActionText::Content |
action_text_content |
ActionText::Record |
action_text_record |
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 |
ActiveRecord::Base |
active_record |
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: Это запустится как только константа приложения унаследуется от Rails::Application. Вызовы config будут вычислены до того, как это произойдет.
before_initialize: Это запустится непосредственно перед процессом инициализации с помощью инициализатора :bootstrap_hook, расположенного рядом с началом процесса инициализации Rails.
to_prepare: Запустится после того, как инициализаторы будут запущены для всех Railties (включая само приложение), но до нетерпеливой загрузки и построения стека промежуточных программ. Что еще более важно, запустится после каждой перезагрузке кода в development, но только раз (при загрузке) в production и test.
before_eager_load: Это запустится непосредственно после нетерпеливой загрузки, что является поведением по умолчанию для среды production, но не development.
after_initialize: Запустится сразу после инициализации приложения, после запуска инициализаторов приложения из config/initializers.
Чтобы определить событие для них, используйте блочный синтаксис в подклассе Rails::Application, Rails::Railtie или Rails::Engine:
module YourApp
class Application < Rails::Application
config.before_initialize do
# тут идет инициализационный код
end
end
end
Это можно сделать также с помощью метода config на объекте Rails.application:
Rails.application.config.before_initialize do
# тут идет инициализационный код
end
Некоторые части вашего приложения, в частности роутинг, пока еще не настроены в месте, где вызывается блок after_initialize.
Rails::Railtie#initializerВ Rails имеется несколько инициализаторов, выполняющихся при запуске, все они определены с использованием метода initializer из Rails::Railtie. Вот пример инициализатора initialize_whiny_nils из Action Controller:
initializer "action_controller.set_helpers_path" do |app|
ActionController::Helpers.helpers_path = app.helpers_paths
end
Метод initializer принимает три аргумента: имя инициализатора, хэш опций (здесь не показан) и блок. В хэше опций может быть определен ключ :before для указания, перед каким инициализатором должен быть запущен новый инициализатор, и ключ :after определяет, после какого инициализатора запустить этот.
Инициализаторы, определенные методом initializer, будут запущены в порядке, в котором они определены, за исключением тех, в которых использованы методы :before или :after.
Можно помещать свои инициализаторы до или после других инициализаторов в цепочки, пока это логично. Скажем, имеется 4 инициализатора, названные от "one" до "four" (определены в этом порядке), и вы определяете "four" идти before "two", но after "three", это не логично, и Rails не сможет установить ваш порядок инициализаторов.
Блочный аргумент метода initializer это экземпляр самого приложение, таким образом, можно получить доступ к его конфигурации, используя метод config, как это сделано в примере.
Поскольку Rails::Application унаследован от Rails::Railtie (опосредованно), можно использовать метод initializer в config/application.rb для определения инициализаторов для приложения.
Ниже приведен полный список всех инициализаторов, присутствующих в Rails в порядке, в котором они определены (и, следовательно, запущены, если не указано иное).
load_environment_hook: Служит в качестве местозаполнителя, так что :load_environment_config может быть определено для запуска до него.
load_active_support: Требует active_support/dependencies, настраивающий основу для Active Support. Опционально требует active_support/all, если config.active_support.bare не истинно, что является значением по умолчанию.
initialize_logger: Инициализирует логгер (объект ActiveSupport::BroadcastLogger) для приложения и делает его доступным как Rails.logger, если до него другой инициализатор не определит Rails.logger.
initialize_cache: Если Rails.cache еще не установлен, инициализирует кэш, обращаясь к значению config.cache_store и сохраняя результат как Rails.cache. Если этот объект отвечает на метод middleware, его промежуточная программа вставляется до Rack::Runtime в стеке промежуточных программ.
set_clear_dependencies_hook: Этот инициализатор - запускающийся, только если config.enable_reloading установлена true - использует ActionDispatch::Callbacks.after для удаления констант, на которые ссылались на протяжении запроса от пространства объекта, так что они могут быть перезагружены в течение следующего запроса.
bootstrap_hook: Запускает все сконфигурированные блоки before_initialize.
i18n.callbacks: В среде development, настраивает колбэк to_prepare, вызывающий I18n.reload!, если любая из локалей изменилась с последнего запроса. В production этот колбэк запускается один раз при первом запросе.
active_support.deprecation_behavior: Настраивает отчеты об устаревании для Rails.application.deprecators, основываясь на config.active_support.report_deprecations, config.active_support.deprecation, config.active_support.disallowed_deprecation и config.active_support.disallowed_deprecation_warnings.
active_support.initialize_time_zone: Устанавливает для приложения временную зону по умолчанию, основываясь на настройке config.time_zone, которая по умолчанию равна "UTC".
active_support.initialize_beginning_of_week: Устанавливает начало недели по умолчанию для приложения, основываясь на настройке config.beginning_of_week, которая по умолчанию :monday.
active_support.set_configs: Настраивает Active Support с помощью настроек в config.active_support посылая имена методов в качестве сеттеров в ActiveSupport и передавая им значения.
action_dispatch.configure: Конфигурирует ActionDispatch::Http::URL.tld_length быть равным значению config.action_dispatch.tld_length.
action_view.set_configs: Устанавливает, чтобы Action View использовал настройки в config.action_view, посылая имена методов через send как сеттер в ActionView::Base и передавая в него значения.
action_controller.assets_config: Инициализирует config.action_controller.assets_dir директорией public приложения, если не сконфигурирована явно.
action_controller.set_helpers_path: Устанавливает helpers_path у Action Controller равным helpers_path приложения.
action_controller.parameters_config: Конфигурирует опции strong parameters для ActionController::Parameters.
action_controller.set_configs: Устанавливает, чтобы Action Controller использовал настройки в config.action_controller, посылая имена методов через send как сеттер в ActionController::Base и передавая в него значения.
action_controller.compile_config_methods: Инициализирует методы для указанных конфигурационных настроек, чтобы доступ к ним был быстрее.
active_record.initialize_timezone: Устанавливает ActiveRecord::Base.time_zone_aware_attributes true, а также ActiveRecord::Base.default_timezone UTC. Когда атрибуты считываются из базы данных, они будут конвертированы во временную зону с использованием Time.zone.
active_record.logger: Устанавливает ActiveRecord::Base.logger - если еще не установлен - как Rails.logger.
active_record.migration_error: Конфигурирует промежуточную программу для проверки невыполненных миграций.
active_record.check_schema_cache_dump: Загружает кэш выгрузки схемы, если настроен и доступен.
active_record.warn_on_records_fetched_greater_than: Включает предупреждения, когда запросы возвращают большое количество записей.
active_record.set_configs: Устанавливает, чтобы Active Record использовал настройки в config.active_record, посылая имена методов через send как сеттер в ActiveRecord::Base и передавая в него значения.
active_record.initialize_database: Загружает конфигурацию базы данных (по умолчанию) из config/database.yml и устанавливает соединение для текущей среды.
active_record.log_runtime: Включает ActiveRecord::Railties::ControllerRuntime и ActiveRecord::Railties::JobRuntime, ответственные за отчет в логгер по времени, затраченному вызовом Active Record для запроса.
active_record.set_reloader_hooks: Сбрасывает все перезагружаемые соединения к базе данных, если config.enable_reloading установлена true.
active_record.add_watchable_files: Добавляет файлы schema.rb и structure.sql в отслеживаемые.
active_job.logger: Устанавливает ActiveRecord::Base.logger - если еще не установлен - как Rails.logger.
active_job.set_configs: Устанавливает, чтобы Active Job использовал настройки config.active_job, посылая имена методов через send как сеттер в ActiveRecord::Base и передавая в него значения.
action_mailer.logger: Устанавливает ActionMailer::Base.logger - если еще не установлен - как Rails.logger.
action_mailer.set_configs: Устанавливает, чтобы Action Mailer использовал настройки в config.action_mailer, посылая имена методов через send как сеттер в ActionMailer::Base и передавая в него значения.
action_mailer.compile_config_methods: Инициализирует методы для указанных конфигурационных настроек, чтобы доступ к ним был быстрее.
set_load_path: Этот инициализатор запускается перед bootstrap_hook. Добавляет пути, определенные config.paths.load_paths, к $LOAD_PATH. И если вы не устанавливали config.add_autoload_paths_to_load_path в false, он также добавит все пути автозагрузки, указанные в config.autoload_paths, config.eager_load_paths, config.autoload_once_paths.
set_autoload_paths: Этот инициализатор запускается перед bootstrap_hook. Добавляет все поддиректории app и пути, определенные config.autoload_paths, config.eager_load_paths и config.autoload_once_paths в ActiveSupport::Dependencies.autoload_paths.
add_routing_paths: Загружает (по умолчанию) все файлы config/routes.rb (в приложении и railties, включая engine-ы) и настраивает маршруты для приложения.
add_locales: Добавляет файлы в config/locales (из приложения, railties и engine-ов) в I18n.load_path, делая доступными переводы в этих файлах.
add_view_paths: Добавляет директорию app/views из приложения, railties и engine-ов в путь поиска файлов вью приложения.
add_mailer_preview_paths: Добавляет директорию test/mailers/previews из приложения, railties и engine-ов в путь поиска файлов превью рассыльщика приложения.
load_environment_config: Этот инициализатор запускается до load_environment_hook. Загружает файл config/environments для текущей среды.
prepend_helpers_path: Добавляет директорию app/helpers из приложения, railties и engine-ов в путь поиска файлов хелперов приложения.
load_config_initializers: Загружает все файлы Ruby из config/initializers в приложении, railties и engine-ах. Файлы в этой директории могут использоваться для хранения конфигурационных настроек, которые нужно сделать после загрузки всех фреймворков.
engines_blank_point: Предоставляет точку инициализации для хука, если нужно что-то сделать до того, как загрузятся engine-ы. После этой точки будут запущены все инициализаторы railties и engine-ов.
add_generator_templates: Находит шаблоны для генераторов в lib/templates приложения, railties и engine-ов, и добавляет их в настройку config.generators.templates, что делает шаблоны доступными для всех ссылающихся генераторов.
ensure_autoload_once_paths_as_subset: Убеждается, что config.autoload_once_paths содержит пути только из config.autoload_paths. Если она содержит другие пути, будет вызвано исключение.
add_to_prepare_blocks: Блок для каждого вызова config.to_prepare в приложении, railtie или engine добавляется в колбэк to_prepare для Action Dispatch, который будет запущен при каждом запросе в development или перед первым запросом в production.
add_builtin_route: Если приложение запускается в среде development, то в маршруты приложения будет добавлен маршрут для rails/info/properties. Этот маршрут предоставляет подробную информацию, такую как версию Rails и Ruby для public/index.html в приложении Rails по умолчанию.
build_middleware_stack: Создает стек промежуточных программ для приложения, возвращает объект, у которого есть метод call, принимающий объект среды Rack для запроса.
eager_load!: Если config.eager_load true, запускает хуки config.before_eager_load, а затем вызывает eager_load!, загружающий все config.eager_load_namespaces.
finisher_hook: Представляет хук после завершения процесса инициализации приложения, а также запускает все блоки config.after_initialize для приложения, railties и engine-ов.
set_routes_reloader: Конфигурирует Action Dispatch, перезагружая файл маршрутов с использованием ActiveSupport::Callbacks.to_run.
disable_dependency_loading: Отключает автоматическую загрузку зависимостей, если config.eager_load установлена true.
Соединения с базой данных Active Record управляются с помощью ActiveRecord::ConnectionAdapters::ConnectionPool, который обеспечивает, что пул подключений синхронизирует количество тредов, получающих доступ, с ограниченным количеством подключений к базе данных. Этот лимит по умолчанию 5, и может быть настроен в database.yml.
development:
adapter: sqlite3
database: storage/development.sqlite3
pool: 5
timeout: 5000
Поскольку управление пулом подключений по умолчанию происходит внутри Active Record, все серверы приложения (Thin, Puma, Unicorn и т.д.) должны вести себя так же. В самом начале пул подключений к базе данных пуст. По мере роста запросов на дополнительные подключения, он будет создавать их, пока не достигнет ограничения на подключения.
Каждый новый запрос займет подключение, как только он впервые запросит доступ в базу данных. В конце запроса он освободит подключение. Это означает, что дополнительный слот подключения будет снова доступен для следующего запроса в очереди.
Если попытаться использовать больше соединений, чем доступно, Active Record заблокируется и подождет соединение из пула. Если он не сможет получить соединение, будет вызвана следующая ошибка тайм-аута.
ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)
Если вы получаете вышеприведенную ошибку, можно попытаться увеличить размер пула соединений, увеличив опцию pool в database.yml
Если вы запускаете многотредовую среду, есть вероятность, что несколько тредов могут получить доступ к нескольким подключениям одновременно. Поэтому, в зависимости от текущей загрузки, вы можете легко получить несколько тредов, претендующих на ограниченное количество подключений.
Можно настроить свой собственный код с помощью конфигурационного объекта Rails с произвольными настройками или в пространстве имен config.x, либо непосредственно в config. Ключевой разницей между этими двумя вариантами является то, что необходимо использовать config.x, если вы определяете вложенную конфигурацию (например, config.x.nested.hi), и просто config для одноуровневой конфигурации (например, config.hello).
config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries = 3
config.super_debugger = true
Эти конфигурационные настройки доступны с помощью конфигурационного объекта:
Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries # => 3
Rails.configuration.x.payment_processing.not_set # => nil
Rails.configuration.super_debugger # => true
Также можно использовать Rails::Application.config_for для загрузки целых конфигурационных файлов:
# config/payment.yml:
production:
environment: production
merchant_id: production_merchant_id
public_key: production_public_key
private_key: production_private_key
development:
environment: sandbox
merchant_id: development_merchant_id
public_key: development_public_key
private_key: development_private_key
# config/application.rb
module MyApp
class Application < Rails::Application
config.payment = config_for(:payment)
end
end
Rails.configuration.payment['merchant_id'] # => production_merchant_id или development_merchant_id
Rails::Application.config_for поддерживает конфигурацию shared для группировки общих конфигураций. Конфигурация shared будет влита в конфигурации среды.
# config/example.yml
shared:
foo:
bar:
baz: 1
development:
foo:
bar:
qux: 2
# среда development
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }
Иногда вы можете захотеть, чтобы некоторые страницы вашего приложения не были видимыми для поисковых сайтов, таких как Google, Bing, Yahoo или Duck Duck Go. Роботы, которые индексируют для этих сайтов, сначала анализируют файл http://your-site.com/robots.txt, который знает, какие страницы доступны для индексации.
Rails создает этот файл для вас внутри папки /public. По умолчанию все страницы вашего приложения доступны для индексации поисковыми движками. Если бы хотите запретить индексировать все страницы вашего приложения, используйте следующее:
User-agent: *
Disallow: /
Чтобы запретить только определенные страницы, необходимо использовать более сложный синтаксис. Изучите его в официальной документации.
Если загружен гем listen, Rails использует наблюдение событийной файловой системы для обнаружения изменений, когда включена перезагрузка:
group :development do
gem "listen", "~> 3.5"
end
В противном случае, в каждом запросе Rails проходит по дереву приложения для проверки, не было ли что-то изменено.
Для Linux и macOS не нужны дополнительные гемы, но требуются для *BSD и для Windows.
Отметьте, что некоторые настройки не поддерживаются.