1 Locais para Código de Inicialização
O Rails oferece quatro locais padrão para colocar código de inicialização:
config/application.rb
- Arquivos de configuração específicos do ambiente
- Inicializadores
- Pós-inicializadores
2 Executando Código Antes do Rails
No caso raro de sua aplicação precisar executar algum código antes do próprio Rails ser carregado, coloque-o acima da chamada para require "rails/all"
no arquivo config/application.rb
.
3 Configurando Componentes do Rails
Em geral, o trabalho de configuração do Rails significa configurar os componentes do Rails, bem como configurar o próprio Rails. O arquivo de configuração config/application.rb
e os arquivos de configuração específicos do ambiente (como config/environments/production.rb
) permitem que você especifique as várias configurações que deseja passar para todos os componentes.
Por exemplo, você pode adicionar esta configuração ao arquivo config/application.rb
:
config.time_zone = 'Central Time (US & Canada)'
Esta é uma configuração para o próprio Rails. Se você deseja passar configurações para componentes individuais do Rails, pode fazer isso por meio do mesmo objeto config
em config/application.rb
:
config.active_record.schema_format = :ruby
O Rails usará essa configuração específica para configurar o Active Record.
AVISO: Use os métodos de configuração públicos em vez de chamar diretamente a classe associada. Por exemplo, use Rails.application.config.action_mailer.options
em vez de ActionMailer::Base.options
.
NOTA: Se você precisar aplicar configuração diretamente a uma classe, use um gancho de carregamento preguiçoso em um inicializador para evitar o carregamento automático da classe antes que a inicialização seja concluída. Isso irá quebrar porque o carregamento automático durante a inicialização não pode ser repetido com segurança quando a aplicação é recarregada.
3.1 Valores Padrão Versionados
config.load_defaults
carrega valores padrão de configuração para uma versão de destino e todas as versões anteriores. Por exemplo, config.load_defaults 6.1
carregará os padrões para todas as versões até e incluindo a versão 6.1.
Abaixo estão os valores padrão associados a cada versão de destino. Em casos de valores conflitantes, as versões mais recentes têm precedência sobre as versões mais antigas.
3.1.1 Valores Padrão para a Versão de Destino 7.1
config.action_controller.allow_deprecated_parameters_hash_equality
:false
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_job.use_big_decimal_serializer
:true
config.active_record.allow_deprecated_singular_associations_name
:false
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.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.log_file_size
:100 * 1024 * 1024
config.precompile_filter_parameters
:true
3.1.2 Valores Padrão para a Versão de Destino 7.0
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.isolation_level
::thread
config.active_support.key_generator_hash_digest_class
:OpenSSL::Digest::SHA256
Valores Padrão para a Versão de Destino 6.1
3.1.3 Valores Padrão para a Versão de Destino 6.0
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
3.1.4 Valores Padrão para a Versão de Destino 5.2
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
3.1.5 Valores Padrão para a Versão de Destino 5.1
config.action_view.form_with_generates_remote_forms
:true
config.assets.unknown_asset_fallback
:false
3.1.6 Valores Padrão para a Versão de Destino 5.0
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 } }
3.2 Configuração Geral do Rails
Os seguintes métodos de configuração devem ser chamados em um objeto Rails::Railtie
, como uma subclasse de Rails::Engine
ou Rails::Application
.
3.2.1 config.add_autoload_paths_to_load_path
Indica se os caminhos de autoload devem ser adicionados ao $LOAD_PATH
. É recomendado definir como false
no modo :zeitwerk
cedo, no arquivo config/application.rb
. O Zeitwerk usa caminhos absolutos internamente e aplicações em modo :zeitwerk
não precisam de require_dependency
, então modelos, controladores, jobs, etc. não precisam estar em $LOAD_PATH
. Definir isso como false
economiza tempo de verificação desses diretórios pelo Ruby ao resolver chamadas de require
com caminhos relativos, além de economizar trabalho e RAM do Bootsnap, já que ele não precisa construir um índice para eles.
O valor padrão depende da versão de destino definida em config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
7.1 | false |
O diretório lib
não é afetado por essa configuração, ele é sempre adicionado ao $LOAD_PATH
.
3.2.2 config.after_initialize
Aceita um bloco que será executado após o Rails terminar de inicializar a aplicação. Isso inclui a inicialização do próprio framework, engines e todos os inicializadores da aplicação em config/initializers
. Note que esse bloco será executado para tarefas do rake. Útil para configurar valores definidos por outros inicializadores:
config.after_initialize do
ActionView::Base.sanitized_allowed_tags.delete 'div'
end
3.2.3 config.after_routes_loaded
Aceita um bloco que será executado após o Rails terminar de carregar as rotas da aplicação. Esse bloco também será executado sempre que as rotas forem recarregadas.
config.after_routes_loaded do
# Código que faz algo com Rails.application.routes
end
3.2.4 config.allow_concurrency
Controla se as requisições devem ser tratadas de forma concorrente. Isso só deve ser definido como false
se o código da aplicação não for thread-safe. O valor padrão é true
.
3.2.5 config.asset_host
Define o host para os assets. Útil quando CDNs são usadas para hospedar os assets, ou quando você deseja contornar as restrições de concorrência incorporadas nos navegadores usando aliases de domínio diferentes. Versão abreviada de config.action_controller.asset_host
.
3.2.6 config.assume_ssl
Faz a aplicação acreditar que todas as requisições estão chegando por SSL. Isso é útil quando há um proxy que termina o SSL e a requisição encaminhada parece ser HTTP em vez de HTTPS para a aplicação. Isso faz com que redirecionamentos e segurança de cookies sejam direcionados para HTTP em vez de HTTPS. Esse middleware faz com que o servidor assuma que o proxy já terminou o SSL e que a requisição realmente é HTTPS.
3.2.7 config.autoflush_log
Habilita a gravação imediata do arquivo de log em vez de fazer buffering. O padrão é true
.
3.2.8 config.autoload_once_paths
Aceita um array de caminhos dos quais o Rails carregará constantes que não serão apagadas por requisição. É relevante se a recarga estiver habilitada, o que é o padrão no ambiente development
. Caso contrário, o carregamento automático acontece apenas uma vez. Todos os elementos deste array também devem estar em autoload_paths
. O padrão é um array vazio.
3.2.9 config.autoload_paths
Aceita um array de caminhos dos quais o Rails carregará constantes. O padrão é um array vazio. Desde o Rails 6, não é recomendado ajustar isso. Veja Carregamento Automático e Recarga de Constantes.
3.2.10 config.autoload_lib(ignore:)
Este método adiciona lib
a config.autoload_paths
e config.eager_load_paths
.
Normalmente, o diretório lib
possui subdiretórios que não devem ser carregados automaticamente ou carregados imediatamente. Por favor, passe o nome deles em relação a lib
no argumento de palavra-chave ignore
necessário. Por exemplo,
config.autoload_lib(ignore: %w(assets tasks generators))
Por favor, veja mais detalhes no guia de carregamento automático.
3.2.11 config.autoload_lib_once(ignore:)
O método config.autoload_lib_once
é similar ao config.autoload_lib
, exceto que ele adiciona lib
a config.autoload_once_paths
em vez disso.
Ao chamar config.autoload_lib_once
, classes e módulos em lib
podem ser carregados automaticamente, mesmo a partir de inicializadores de aplicação, mas não serão recarregados.
3.2.12 config.beginning_of_week
Define o início padrão da semana para a aplicação. Aceita um dia válido da semana como um símbolo (por exemplo, :monday
).
3.2.13 config.cache_classes
Configuração antiga equivalente a !config.enable_reloading
. Suportada por compatibilidade com versões anteriores.
3.2.14 config.cache_store
Configura qual cache store usar para o cache do Rails. As opções incluem um dos símbolos :memory_store
, :file_store
, :mem_cache_store
, :null_store
, :redis_cache_store
, ou um objeto que implementa a API de cache. O padrão é :file_store
. Veja Cache Stores para opções de configuração por store.
3.2.15 config.colorize_logging
Especifica se deve ou não usar códigos de cor ANSI ao registrar informações. O padrão é true
.
3.2.16 config.consider_all_requests_local
É uma flag. Se for true
, qualquer erro causará a exibição de informações detalhadas de depuração na resposta HTTP, e o controlador Rails::Info
mostrará o contexto de execução da aplicação em /rails/info/properties
. Por padrão, é true
nos ambientes de desenvolvimento e teste, e false
em produção. Para um controle mais refinado, defina isso como false
e implemente show_detailed_exceptions?
nos controladores para especificar quais requisições devem fornecer informações de depuração em caso de erros.
3.2.17 config.console
Permite definir a classe que será usada como console quando você executar bin/rails console
. É melhor executá-lo no bloco console
:
console do
# este bloco é chamado apenas ao executar o console,
# então podemos exigir com segurança o pry aqui
require "pry"
config.console = Pry
end
3.2.18 config.content_security_policy_nonce_directives
Veja Adicionando um Nonce no Guia de Segurança
3.2.19 config.content_security_policy_nonce_generator
Veja Adicionando um Nonce no Guia de Segurança
3.2.20 config.content_security_policy_report_only
Veja Relatando Violações no Guia de Segurança
3.2.21 config.credentials.content_path
O caminho do arquivo de credenciais criptografado.
O padrão é config/credentials/#{Rails.env}.yml.enc
se existir, ou
config/credentials.yml.enc
caso contrário.
NOTA: Para que os comandos bin/rails credentials
reconheçam esse valor,
ele deve ser definido em config/application.rb
ou config/environments/#{Rails.env}.rb
.
3.2.22 config.credentials.key_path
O caminho do arquivo de chave de credenciais criptografado.
O padrão é config/credentials/#{Rails.env}.key
se existir, ou
config/master.key
caso contrário.
NOTA: Para que os comandos bin/rails credentials
reconheçam esse valor,
ele deve ser definido em config/application.rb
ou config/environments/#{Rails.env}.rb
.
3.2.23 config.debug_exception_response_format
Define o formato usado nas respostas quando ocorrem erros no ambiente de desenvolvimento. O padrão é :api
para aplicativos apenas de API e :default
para aplicativos normais.
3.2.24 config.disable_sandbox
Controla se alguém pode ou não iniciar um console no modo sandbox. Isso é útil para evitar uma sessão de console sandbox em execução por muito tempo, o que poderia levar um servidor de banco de dados a ficar sem memória. O padrão é false
.
3.2.25 config.eager_load
Quando true
, carrega antecipadamente todos os config.eager_load_namespaces
registrados. Isso inclui sua aplicação, engines, frameworks do Rails e qualquer outro namespace registrado.
3.2.26 config.eager_load_namespaces
Registra namespaces que são carregados antecipadamente quando config.eager_load
é definido como true
. Todos os namespaces na lista devem responder ao método eager_load!
.
3.2.27 config.eager_load_paths
Aceita uma matriz de caminhos dos quais o Rails carregará antecipadamente na inicialização se config.eager_load
for verdadeiro. O padrão é todas as pastas no diretório app
da aplicação.
3.2.28 config.enable_reloading
Se config.enable_reloading
for verdadeiro, as classes e módulos da aplicação são recarregados entre as solicitações da web se houver alterações. O padrão é true
no ambiente development
e false
no ambiente production
.
O predicado config.reloading_enabled?
também é definido.
3.2.29 config.encoding
Configura a codificação em toda a aplicação. O padrão é UTF-8.
3.2.30 config.exceptions_app
Define a aplicação de exceções invocada pelo middleware ShowException
quando ocorre uma exceção. O padrão é ActionDispatch::PublicExceptions.new(Rails.public_path)
.
As aplicações de exceções precisam lidar com erros ActionDispatch::Http::MimeNegotiation::InvalidType
, que são gerados quando um cliente envia um cabeçalho Accept
ou Content-Type
inválido.
A aplicação padrão ActionDispatch::PublicExceptions
faz isso automaticamente, definindo Content-Type
como text/html
e retornando um status 406 Not Acceptable
.
Falha em lidar com esse erro resultará em um 500 Internal Server Error
.
Usar o Rails.application.routes
RouteSet
como aplicação de exceções também requer esse tratamento especial.
Pode ser algo parecido com isso:
# 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
3.2.31 config.file_watcher
É a classe usada para detectar atualizações de arquivos no sistema de arquivos quando config.reload_classes_only_on_change
é true
. O Rails vem com ActiveSupport::FileUpdateChecker
, o padrão, e ActiveSupport::EventedFileUpdateChecker
(este depende da gem listen). Classes personalizadas devem seguir a API ActiveSupport::FileUpdateChecker
.
3.2.32 config.filter_parameters
Usado para filtrar os parâmetros que você não deseja mostrar nos logs, como senhas ou números de cartão de crédito. Também filtra valores sensíveis de colunas do banco de dados ao chamar #inspect
em um objeto Active Record. Por padrão, o Rails filtra senhas adicionando os seguintes filtros em config/initializers/filter_parameter_logging.rb
.
Rails.application.config.filter_parameters += [
:passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
O filtro de parâmetros funciona por correspondência parcial de expressões regulares.
3.2.33 config.filter_redirect
Usado para filtrar URLs de redirecionamento nos logs da aplicação.
Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]
O filtro de redirecionamento funciona testando se as URLs incluem strings ou correspondem a expressões regulares.
3.2.34 config.force_ssl
Força todas as solicitações a serem servidas por HTTPS e define "https://" como o protocolo padrão ao gerar URLs. A aplicação do HTTPS é tratada pelo middleware ActionDispatch::SSL
, que pode ser configurado por meio de config.ssl_options
.
3.2.35 config.helpers_paths
Define um array de caminhos adicionais para carregar ajudantes de visualização.
3.2.36 config.host_authorization
Aceita um hash de opções para configurar o middleware HostAuthorization.
3.2.37 config.hosts
Um array de strings, expressões regulares ou IPAddr
usados para validar o cabeçalho Host
. Usado pelo middleware HostAuthorization para ajudar a prevenir ataques de rebinding DNS.
3.2.38 config.javascript_path
Define o caminho onde o JavaScript do seu aplicativo está localizado em relação ao diretório app
. O padrão é javascript
, usado pelo webpacker. O javascript_path
configurado de um aplicativo será excluído dos autoload_paths
.
3.2.39 config.log_file_size
Define o tamanho máximo do arquivo de log do Rails em bytes. O padrão é 104_857_600
(100 MiB) em desenvolvimento e teste, e ilimitado em todos os outros ambientes.
3.2.40 config.log_formatter
Define o formatador do logger do Rails. Esta opção tem como padrão uma instância de ActiveSupport::Logger::SimpleFormatter
para todos os ambientes. Se você estiver definindo um valor para config.logger
, você deve passar manualmente o valor do seu formatador para o seu logger antes que ele seja envolvido em uma instância de ActiveSupport::TaggedLogging
, o Rails não fará isso por você.
3.2.41 config.log_level
Define a verbosidade do logger do Rails. Esta opção tem como padrão :debug
para todos os ambientes, exceto produção, onde tem como padrão :info
. Os níveis de log disponíveis são: :debug
, :info
, :warn
, :error
, :fatal
e :unknown
.
3.2.42 config.log_tags
Aceita uma lista de métodos aos quais o objeto request
responde, um Proc
que aceita o objeto request
ou algo que responda a to_s
. Isso facilita a marcação de linhas de log com informações de depuração, como subdomínio e ID de solicitação - ambos muito úteis na depuração de aplicativos de produção multiusuário.
3.2.43 config.logger
É o logger que será usado para Rails.logger
e qualquer outro log relacionado ao Rails, como ActiveRecord::Base.logger
. O padrão é uma instância de ActiveSupport::TaggedLogging
que envolve uma instância de ActiveSupport::Logger
que gera um log para o diretório log/
. Você pode fornecer um logger personalizado, para obter compatibilidade total, você deve seguir estas diretrizes:
- Para suportar um formatador, você deve atribuir manualmente um formatador do valor
config.log_formatter
ao logger. - Para suportar logs marcados, a instância de log deve ser envolvida com
ActiveSupport::TaggedLogging
. - Para suportar o silenciamento, o logger deve incluir o módulo
ActiveSupport::LoggerSilence
. A classeActiveSupport::Logger
já inclui esses módulos.
class MyLogger < ::Logger
include ActiveSupport::LoggerSilence
end
mylogger = MyLogger.new(STDOUT)
mylogger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(mylogger)
3.2.44 config.middleware
Permite configurar o middleware da aplicação. Isso é abordado em detalhes na seção Configurando o Middleware abaixo.
3.2.45 config.precompile_filter_parameters
Quando true
, irá pré-compilar config.filter_parameters
usando ActiveSupport::ParameterFilter.precompile_filters
.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.2.46 config.public_file_server.enabled
Configura o Rails para servir arquivos estáticos do diretório public
. Esta opção tem como padrão true
, mas no ambiente de produção é definida como false
, porque o software do servidor (por exemplo, NGINX ou Apache) usado para executar a aplicação deve servir arquivos estáticos. Se você estiver executando ou testando seu aplicativo em produção usando o WEBrick (não é recomendado usar o WEBrick em produção), defina a opção como true
. Caso contrário, você não poderá usar o cache de página e solicitar arquivos que existem no diretório public
.
3.2.47 config.railties_order
Permite especificar manualmente a ordem em que as Railties/Engines são carregadas. O valor padrão é [:all]
.
config.railties_order = [Blog::Engine, :main_app, :all]
3.2.48 config.rake_eager_load
Quando true
, carrega antecipadamente a aplicação ao executar tarefas Rake. O valor padrão é false
.
3.2.49 config.read_encrypted_secrets
DEPRECIADO: Você deve usar credentials em vez de secrets criptografados.
Quando true
, tentará ler secrets criptografados de config/secrets.yml.enc
3.2.50 config.relative_url_root
Pode ser usado para informar ao Rails que você está implantando em um subdiretório. O valor padrão é ENV['RAILS_RELATIVE_URL_ROOT']
.
3.2.51 config.reload_classes_only_on_change
Habilita ou desabilita o recarregamento de classes apenas quando arquivos rastreados são alterados. Por padrão, rastreia tudo nos caminhos de autoload e é definido como true
. Se config.enable_reloading
for false
, essa opção é ignorada.
3.2.52 config.require_master_key
Faz com que a aplicação não inicialize se uma chave mestra não estiver disponível por meio de ENV["RAILS_MASTER_KEY"]
ou do arquivo config/master.key
.
3.2.53 config.secret_key_base
A alternativa para especificar a chave de entrada para o gerador de chave de uma aplicação.
Recomenda-se deixar isso não definido e, em vez disso, especificar um secret_key_base
em config/credentials.yml.enc
. Consulte a documentação da API secret_key_base
para obter mais informações e métodos de configuração alternativos.
3.2.54 config.server_timing
Quando true
, adiciona o middleware ServerTiming
à pilha de middlewares.
3.2.55 config.session_options
Opções adicionais passadas para config.session_store
. Você deve usar
config.session_store
para definir isso em vez de modificá-lo manualmente.
config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}
3.2.56 config.session_store
Especifica qual classe usar para armazenar a sessão. Os valores possíveis são :cache_store
, :cookie_store
, :mem_cache_store
, um armazenamento personalizado ou :disabled
. :disabled
informa ao Rails para não lidar com sessões.
Essa configuração é feita por meio de uma chamada de método regular, em vez de um setter. Isso permite que opções adicionais sejam passadas:
config.session_store :cookie_store, key: "_your_app_session"
Se um armazenamento personalizado for especificado como um símbolo, ele será resolvido para o namespace ActionDispatch::Session
:
# use ActionDispatch::Session::MyCustomStore como armazenamento de sessão
config.session_store :my_custom_store
O armazenamento padrão é um armazenamento de cookie com o nome da aplicação como chave de sessão.
3.2.57 config.ssl_options
Opções de configuração para o middleware ActionDispatch::SSL
.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | {} |
5.0 | { hsts: { subdomains: true } } |
3.2.58 config.time_zone
Define o fuso horário padrão para a aplicação e habilita a conscientização do fuso horário para o Active Record.
3.2.59 config.x
Usado para adicionar facilmente uma configuração personalizada aninhada ao objeto de configuração da aplicação.
config.x.payment_processing.schedule = :daily
Rails.configuration.x.payment_processing.schedule # => :daily
Consulte Configuração Personalizada
3.3 Configurando Ativos
3.3.1 config.assets.css_compressor
Define o compressor CSS a ser usado. É definido por padrão pelo sass-rails
. O único valor alternativo no momento é :yui
, que usa a gem yui-compressor
.
3.3.2 config.assets.js_compressor
Define o compressor JavaScript a ser usado. Os valores possíveis são :terser
, :closure
, :uglifier
e :yui
, que requerem o uso das gems terser
, closure-compiler
, uglifier
ou yui-compressor
, respectivamente.
3.3.3 config.assets.gzip
Uma flag que habilita a criação de uma versão compactada dos ativos compilados, juntamente com os ativos não compactados. Definido como true
por padrão.
3.3.4 config.assets.paths
Contém os caminhos que são usados para procurar ativos. Adicionar caminhos a essa opção de configuração fará com que esses caminhos sejam usados na busca por ativos.
3.3.5 config.assets.precompile
Permite especificar ativos adicionais (além de application.css
e application.js
) que devem ser pré-compilados quando bin/rails assets:precompile
é executado.
3.3.6 config.assets.unknown_asset_fallback
Permite modificar o comportamento do pipeline de ativos quando um ativo não está no pipeline, se você estiver usando sprockets-rails 3.2.0 ou mais recente.
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
5.1 | false |
3.3.7 config.assets.prefix
Define o prefixo de onde os ativos são servidos. Padrão é /assets
.
3.3.8 config.assets.manifest
Define o caminho completo a ser usado para o arquivo de manifesto do pré-compilador de ativos. Padrão é um arquivo chamado manifest-<random>.json
no diretório config.assets.prefix
dentro da pasta public.
3.3.9 config.assets.digest
Habilita o uso de impressões digitais SHA256 nos nomes dos ativos. Padrão é true
.
3.3.10 config.assets.debug
Desabilita a concatenação e compressão de ativos. Padrão é true
em development.rb
.
3.3.11 config.assets.version
É uma string de opção que é usada na geração de hash SHA256. Isso pode ser alterado para forçar a recompilação de todos os arquivos.
3.3.12 config.assets.compile
É um booleano que pode ser usado para ativar a compilação ao vivo do Sprockets em produção.
3.3.13 config.assets.logger
Aceita um logger que segue a interface do Log4r ou a classe Ruby Logger
padrão. Padrão é o mesmo configurado em config.logger
. Definir config.assets.logger
como false
desativará o registro de ativos servidos.
3.3.14 config.assets.quiet
Desabilita o registro de solicitações de ativos. Padrão é true
em development.rb
.
3.4 Configurando Geradores
O Rails permite alterar quais geradores são usados com o método config.generators
. Este método recebe um bloco:
config.generators do |g|
g.orm :active_record
g.test_framework :test_unit
end
O conjunto completo de métodos que podem ser usados neste bloco são os seguintes:
force_plural
permite nomes de modelos no plural. Padrão éfalse
.helper
define se deve gerar helpers ou não. Padrão étrue
.integration_tool
define qual ferramenta de integração usar para gerar testes de integração. Padrão é:test_unit
.system_tests
define qual ferramenta de integração usar para gerar testes de sistema. Padrão é:test_unit
.orm
define qual ORM usar. Padrão éfalse
e usará o Active Record por padrão.resource_controller
define qual gerador usar para gerar um controlador ao usarbin/rails generate resource
. Padrão é:controller
.resource_route
define se uma definição de rota de recurso deve ser gerada ou não. Padrão étrue
.scaffold_controller
diferente deresource_controller
, define qual gerador usar para gerar um controlador scaffolded ao usarbin/rails generate scaffold
. Padrão é:scaffold_controller
.test_framework
define qual framework de teste usar. Padrão éfalse
e usará o minitest por padrão.template_engine
define qual mecanismo de template usar, como ERB ou Haml. Padrão é:erb
.
3.5 Configurando Middleware
Toda aplicação Rails vem com um conjunto padrão de middleware que é usado nesta ordem no ambiente de desenvolvimento:
3.5.1 ActionDispatch::HostAuthorization
Previne ataques de rebinding DNS e outros ataques de cabeçalho Host
.
Ele é incluído no ambiente de desenvolvimento por padrão com a seguinte configuração:
Rails.application.config.hosts = [
IPAddr.new("0.0.0.0/0"), # Todos os endereços IPv4.
IPAddr.new("::/0"), # Todos os endereços IPv6.
"localhost", # O domínio reservado localhost.
ENV["RAILS_DEVELOPMENT_HOSTS"] # Hosts adicionais separados por vírgula para desenvolvimento.
]
Em outros ambientes, Rails.application.config.hosts
está vazio e nenhuma verificação de cabeçalho Host
será feita. Se você deseja se proteger contra ataques de cabeçalho em produção, você precisa permitir manualmente os hosts permitidos com:
Rails.application.config.hosts << "product.com"
O host de uma solicitação é verificado em relação às entradas de hosts
com o operador de caso (#===
), que permite que hosts
suporte entradas do tipo Regexp
, Proc
e IPAddr
, entre outros. Aqui está um exemplo com uma expressão regular.
# Permitir solicitações de subdomínios como `www.product.com` e
# `beta1.product.com`.
Rails.application.config.hosts << /.*\.product\.com/
A expressão regular fornecida será envolvida com âncoras (\A
e \z
) para que corresponda ao nome do host inteiro. /product.com/
, por exemplo, uma vez ancorado, não corresponderia a www.product.com
.
Um caso especial é suportado que permite permitir todos os subdomínios:
# Permitir solicitações de subdomínios como `www.product.com` e
# `beta1.product.com`.
Rails.application.config.hosts << ".product.com"
Você pode excluir determinadas solicitações das verificações de Autorização de Host definindo config.host_authorization.exclude
:
# Excluir solicitações para o caminho /healthcheck/ da verificação de host
Rails.application.config.host_authorization = {
exclude: ->(request) { request.path.include?('healthcheck') }
}
Quando uma solicitação é feita a um host não autorizado, uma aplicação Rack padrão será executada e responderá com 403 Forbidden
. Isso pode ser personalizado definindo config.host_authorization.response_app
. Por exemplo:
Rails.application.config.host_authorization = {
response_app: -> env do
[400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
end
}
3.5.2 ActionDispatch::ServerTiming
Adiciona métricas ao cabeçalho Server-Timing
para serem visualizadas nas ferramentas de desenvolvimento de um navegador.
3.5.3 ActionDispatch::SSL
Força todas as solicitações a serem servidas usando HTTPS. Habilitado se config.force_ssl
estiver definido como true
. As opções passadas para isso podem ser configuradas definindo config.ssl_options
.
3.5.4 ActionDispatch::Static
É usado para servir ativos estáticos. Desativado se config.public_file_server.enabled
for false
. Defina config.public_file_server.index_name
se você precisar servir um arquivo de índice de diretório estático que não tenha o nome index
. Por exemplo, para servir main.html
em vez de index.html
para solicitações de diretório, defina config.public_file_server.index_name
como "main"
.
3.5.5 ActionDispatch::Executor
Permite a recarga de código segura por thread. Desativado se config.allow_concurrency
for false
, o que faz com que Rack::Lock
seja carregado. Rack::Lock
envolve o aplicativo em um mutex para que possa ser chamado apenas por uma única thread de cada vez.
3.5.6 ActiveSupport::Cache::Strategy::LocalCache
Serve como um cache básico em memória. Este cache não é seguro para threads e destina-se apenas a servir como um cache temporário em memória para uma única thread.
3.5.7 Rack::Runtime
Define um cabeçalho X-Runtime
, contendo o tempo (em segundos) necessário para executar a solicitação.
3.5.8 Rails::Rack::Logger
Registra nos logs que a solicitação foi iniciada. Após a conclusão da solicitação, todos os logs são liberados.
3.5.9 ActionDispatch::ShowExceptions
Resgata qualquer exceção retornada pela aplicação e renderiza páginas de exceção agradáveis se a solicitação for local ou se config.consider_all_requests_local
estiver definido como true
. Se config.action_dispatch.show_exceptions
estiver definido como :none
, as exceções serão lançadas independentemente.
3.5.10 ActionDispatch::RequestId
Disponibiliza um cabeçalho X-Request-Id exclusivo para a resposta e habilita o método ActionDispatch::Request#uuid
. Configurável com config.action_dispatch.request_id_header
.
3.5.11 ActionDispatch::RemoteIp
Verifica ataques de falsificação de IP e obtém o client_ip
válido dos cabeçalhos da solicitação. Configurável com as opções config.action_dispatch.ip_spoofing_check
e config.action_dispatch.trusted_proxies
.
3.5.12 Rack::Sendfile
Intercepta respostas cujo corpo está sendo servido a partir de um arquivo e substitui-o por um cabeçalho X-Sendfile específico do servidor. Configurável com config.action_dispatch.x_sendfile_header
.
3.5.13 ActionDispatch::Callbacks
Executa os callbacks de preparação antes de atender à solicitação.
3.5.14 ActionDispatch::Cookies
Define cookies para a solicitação.
3.5.15 ActionDispatch::Session::CookieStore
É responsável por armazenar a sessão em cookies. Um middleware alternativo pode ser usado para isso alterando config.session_store
.
3.5.16 ActionDispatch::Flash
Configura as chaves flash
. Disponível apenas se config.session_store
estiver definido com um valor.
3.5.17 Rack::MethodOverride
Permite que o método seja substituído se params[:_method]
estiver definido. Este é o middleware que suporta os tipos de método HTTP PATCH, PUT e DELETE.
3.5.18 Rack::Head
Converte solicitações HEAD em solicitações GET e as atende como tal.
3.5.19 Adicionando Middleware Personalizado
Além desses middlewares usuais, você pode adicionar os seus próprios usando o método config.middleware.use
:
config.middleware.use Magical::Unicorns
Isso colocará o middleware Magical::Unicorns
no final da pilha. Você pode usar insert_before
se desejar adicionar um middleware antes de outro.
config.middleware.insert_before Rack::Head, Magical::Unicorns
Ou você pode inserir um middleware em uma posição exata usando índices. Por exemplo, se você deseja inserir o middleware Magical::Unicorns
no topo da pilha, você pode fazer isso, assim:
config.middleware.insert_before 0, Magical::Unicorns
Também existe o insert_after
, que irá inserir um middleware após outro:
config.middleware.insert_after Rack::Head, Magical::Unicorns
Os middlewares também podem ser completamente substituídos por outros:
config.middleware.swap ActionController::Failsafe, Lifo::Failsafe
Os middlewares podem ser movidos de um lugar para outro:
config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns
Isso moverá o middleware Magical::Unicorns
antes do ActionDispatch::Flash
. Você também pode movê-lo depois:
config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
Eles também podem ser removidos completamente da pilha:
config.middleware.delete Rack::MethodOverride
3.6 Configurando i18n
Todas essas opções de configuração são delegadas para a biblioteca I18n
.
3.6.1 config.i18n.available_locales
Define os locais disponíveis permitidos para o aplicativo. O padrão são todas as chaves de local encontradas nos arquivos de localização, geralmente apenas :en
em um novo aplicativo.
3.6.2 config.i18n.default_locale
Define o local padrão de um aplicativo usado para i18n. O padrão é :en
.
3.6.3 config.i18n.enforce_available_locales
Garante que todos os locais passados pelo i18n devem ser declarados na lista available_locales
, gerando uma exceção I18n::InvalidLocale
ao definir um local indisponível. O padrão é true
. É recomendado não desativar essa opção, a menos que seja estritamente necessário, pois isso funciona como uma medida de segurança contra a definição de qualquer local inválido a partir da entrada do usuário.
3.6.4 config.i18n.load_path
Define o caminho que o Rails usa para procurar arquivos de localização. O padrão é config/locales/**/*.{yml,rb}
.
3.6.5 config.i18n.raise_on_missing_translations
Determina se um erro deve ser gerado para traduções ausentes. O padrão é false
.
3.6.6 config.i18n.fallbacks
Define o comportamento de fallback para traduções ausentes. Aqui estão 3 exemplos de uso para essa opção:
Você pode definir a opção como
true
para usar o local padrão como fallback, assim:config.i18n.fallbacks = true
Ou você pode definir um array de locais como fallback, assim:
config.i18n.fallbacks = [:tr, :en]
Ou você pode definir fallbacks diferentes para locais individualmente. Por exemplo, se você deseja usar
:tr
para:az
e:de
,:en
para:da
como fallbacks, você pode fazer assim:config.i18n.fallbacks = { az: :tr, da: [:de, :en] } #ou config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
Configurando Active Model
3.6.7 config.active_model.i18n_customize_full_message
Controla se o formato Error#full_message
pode ser substituído em um arquivo de localização i18n. O valor padrão é false
.
Quando definido como true
, full_message
procurará um formato nos arquivos de localização do atributo e do modelo. O formato padrão é "%{attribute} %{message}"
, onde attribute
é o nome do atributo e message
é a mensagem específica de validação. O exemplo a seguir substitui o formato para todos os atributos de Person
, bem como o formato para um atributo específico de Person
(age
).
class Person
include ActiveModel::Validations
attr_accessor :name, :age
validates :name, :age, presence: true
end
en:
activemodel: # or activerecord:
errors:
models:
person:
# Substitui o formato para todos os atributos de Person:
format: "Inválido %{attribute} (%{message})"
attributes:
age:
# Substitui o formato para o atributo age:
format: "%{message}"
blank: "Por favor, preencha o seu %{attribute}"
irb> person = Person.new.tap(&:valid?)
irb> person.errors.full_messages
=> [
"Inválido Nome (não pode ficar em branco)",
"Por favor, preencha o seu Age"
]
irb> person.errors.messages
=> {
:name => ["não pode ficar em branco"],
:age => ["Por favor, preencha o seu Age"]
}
3.7 Configurando Active Record
config.active_record
inclui uma variedade de opções de configuração:
3.7.1 config.active_record.logger
Aceita um logger que segue a interface do Log4r ou a classe padrão de logger do Ruby, que é então passado para quaisquer novas conexões de banco de dados feitas. Você pode recuperar esse logger chamando logger
em uma classe de modelo Active Record ou em uma instância de modelo Active Record. Defina como nil
para desativar o registro.
3.7.2 config.active_record.primary_key_prefix_type
Permite ajustar a nomenclatura das colunas de chave primária. Por padrão, o Rails assume que as colunas de chave primária são nomeadas id
(e essa opção de configuração não precisa ser definida). Existem outras duas opções:
:table_name
faria com que a chave primária para a classe Customer sejacustomerid
.:table_name_with_underscore
faria com que a chave primária para a classe Customer sejacustomer_id
.
3.7.3 config.active_record.table_name_prefix
Permite definir uma string global a ser prefixada nos nomes das tabelas. Se você definir isso como northwest_
, então a classe Customer procurará por northwest_customers
como sua tabela. O padrão é uma string vazia.
3.7.4 config.active_record.table_name_suffix
Permite definir uma string global a ser anexada aos nomes das tabelas. Se você definir isso como _northwest
, então a classe Customer procurará por customers_northwest
como sua tabela. O padrão é uma string vazia.
3.7.5 config.active_record.schema_migrations_table_name
Permite definir uma string a ser usada como o nome da tabela de migrações de esquema.
3.7.6 config.active_record.internal_metadata_table_name
Permite definir uma string a ser usada como o nome da tabela de metadados internos.
3.7.7 config.active_record.protected_environments
Permite definir uma matriz de nomes de ambientes onde ações destrutivas devem ser proibidas.
3.7.8 config.active_record.pluralize_table_names
Especifica se o Rails procurará nomes de tabelas no banco de dados no singular ou no plural. Se definido como true
(o padrão), então a classe Customer usará a tabela customers
. Se definido como false
, então a classe Customer usará a tabela customer
.
3.7.9 config.active_record.default_timezone
Determina se deve usar Time.local
(se definido como :local
) ou Time.utc
(se definido como :utc
) ao buscar datas e horários do banco de dados. O padrão é :utc
.
3.7.10 config.active_record.schema_format
Controla o formato para despejar o esquema do banco de dados para um arquivo. As opções são :ruby
(o padrão) para uma versão independente do banco de dados que depende de migrações, ou :sql
para um conjunto de declarações SQL (potencialmente dependentes do banco de dados).
3.7.11 config.active_record.error_on_ignored_order
Especifica se um erro deve ser lançado se a ordem de uma consulta for ignorada durante uma consulta em lote. As opções são true
(lançar erro) ou false
(avisar). O padrão é false
.
3.7.12 config.active_record.timestamped_migrations
Controla se as migrações são numeradas com inteiros sequenciais ou com timestamps. O padrão é true
, para usar timestamps, que são preferidos se houver vários desenvolvedores trabalhando na mesma aplicação.
3.7.13 config.active_record.db_warnings_action
Controla a ação a ser tomada quando uma consulta SQL produz um aviso. As seguintes opções estão disponíveis:
:ignore
- Os avisos do banco de dados serão ignorados. Este é o padrão.:log
- Os avisos do banco de dados serão registrados viaActiveRecord.logger
no nível:warn
.:raise
- Os avisos do banco de dados serão lançados comoActiveRecord::SQLWarning
.:report
- Os avisos do banco de dados serão reportados aos assinantes do relatório de erros do Rails.Proc personalizado - Um proc personalizado pode ser fornecido. Ele deve aceitar um objeto de erro
SQLWarning
.Por exemplo:
config.active_record.db_warnings_action = ->(warning) do # Reportar para um serviço personalizado de relatório de exceções Bugsnag.notify(warning.message) do |notification| notification.add_metadata(:warning_code, warning.code) notification.add_metadata(:warning_level, warning.level) end end
3.7.14 config.active_record.db_warnings_ignore
Especifica uma lista de permissões de códigos e mensagens de aviso que serão ignorados, independentemente da db_warnings_action
configurada. O comportamento padrão é reportar todos os avisos. Os avisos a serem ignorados podem ser especificados como Strings ou Regexps. Por exemplo:
config.active_record.db_warnings_action = :raise
# Os seguintes avisos não serão lançados
config.active_record.db_warnings_ignore = [
/Invalid utf8mb4 character string/,
"Uma mensagem de aviso exata",
"1062", # Erro 1062 do MySQL: Entrada duplicada
]
3.7.15 config.active_record.migration_strategy
Controla a classe de estratégia usada para executar métodos de declaração de esquema em uma migração. A classe padrão
delega para o adaptador de conexão. Estratégias personalizadas devem herdar de ActiveRecord::Migration::ExecutionStrategy
,
ou podem herdar de DefaultStrategy
, que preservará o comportamento padrão para métodos que não são implementados:
class CustomMigrationStrategy < ActiveRecord::Migration::DefaultStrategy
def drop_table(*)
raise "A exclusão de tabelas não é suportada!"
end
end
config.active_record.migration_strategy = CustomMigrationStrategy
3.7.16 config.active_record.lock_optimistically
Controla se o Active Record usará bloqueio otimista e é true
por padrão.
3.7.17 config.active_record.cache_timestamp_format
Controla o formato do valor de timestamp na chave de cache. O padrão é :usec
.
3.7.18 config.active_record.record_timestamps
É um valor booleano que controla se a marcação de tempo das operações create
e update
em um modelo ocorre. O valor padrão é true
.
3.7.19 config.active_record.partial_inserts
É um valor booleano e controla se gravações parciais são usadas ao criar novos registros (ou seja, se as inserções apenas definem atributos diferentes do padrão).
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
7.0 | false |
3.7.20 config.active_record.partial_updates
É um valor booleano e controla se gravações parciais são usadas ao atualizar registros existentes (ou seja, se as atualizações apenas definem atributos que estão sujos). Observe que ao usar atualizações parciais, você também deve usar bloqueio otimista config.active_record.lock_optimistically
, pois atualizações concorrentes podem gravar atributos com base em um estado de leitura possivelmente desatualizado. O valor padrão é true
.
3.7.21 config.active_record.maintain_test_schema
É um valor booleano que controla se o Active Record deve tentar manter o esquema do banco de dados de teste atualizado com db/schema.rb
(ou db/structure.sql
) quando você executa seus testes. O valor padrão é true
.
3.7.22 config.active_record.dump_schema_after_migration
É uma flag que controla se o dump do esquema deve acontecer (db/schema.rb
ou db/structure.sql
) quando você executa as migrações. Isso é definido como false
em config/environments/production.rb
, que é gerado pelo Rails. O valor padrão é true
se essa configuração não estiver definida.
3.7.23 config.active_record.dump_schemas
Controla quais esquemas de banco de dados serão dumpados ao chamar db:schema:dump
. As opções são :schema_search_path
(o padrão), que faz o dump de todos os esquemas listados em schema_search_path
, :all
, que sempre faz o dump de todos os esquemas, independentemente do schema_search_path
, ou uma string de esquemas separados por vírgula.
3.7.24 config.active_record.before_committed_on_all_records
Habilita os callbacks before_committed! em todos os registros inscritos em uma transação. O comportamento anterior era executar os callbacks apenas na primeira cópia de um registro se houvesse várias cópias do mesmo registro inscritas na transação.
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.7.25 config.active_record.belongs_to_required_by_default
É um valor booleano que controla se um registro falha na validação se a associação belongs_to
não estiver presente.
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | nil |
5.0 | true |
3.7.26 config.active_record.belongs_to_required_validates_foreign_key
Habilita a validação apenas das colunas relacionadas ao pai para presença quando o pai é obrigatório. O comportamento anterior era validar a presença do registro pai, o que realizava uma consulta extra para obter o pai toda vez que o registro filho era atualizado, mesmo quando o pai não havia sido alterado.
A partir da versão | O valor padrão é |
---|---|
(original) | true |
7.1 | false |
3.7.27 config.active_record.marshalling_format_version
Quando definido como 7.1
, permite uma serialização mais eficiente da instância do Active Record com Marshal.dump
.
Isso altera o formato de serialização, então modelos serializados dessa maneira não podem ser lidos por versões mais antigas (< 7.1) do Rails. No entanto, mensagens que usam o formato antigo ainda podem ser lidas, independentemente de essa otimização estar habilitada.
A partir da versão | O valor padrão é |
---|---|
(original) | 6.1 |
7.1 | 7.1 |
3.7.28 config.active_record.action_on_strict_loading_violation
Habilita o lançamento ou o registro de uma exceção se o strict_loading for definido em uma associação. O valor padrão é :raise
em todos os ambientes. Pode ser alterado para :log
para enviar violações para o logger em vez de lançar uma exceção.
3.7.29 config.active_record.strict_loading_by_default
É um valor booleano que habilita ou desabilita o modo strict_loading por padrão. O padrão é false
.
3.7.30 config.active_record.warn_on_records_fetched_greater_than
Permite definir um limite de aviso para o tamanho do resultado de uma consulta. Se o número de registros retornados por uma consulta exceder o limite, um aviso é registrado. Isso pode ser usado para identificar consultas que podem estar causando um consumo excessivo de memória.
3.7.31 config.active_record.index_nested_attribute_errors
Permite que erros para relacionamentos has_many
aninhados sejam exibidos com um índice, além do erro em si. O padrão é false
.
3.7.32 config.active_record.use_schema_cache_dump
Permite que os usuários obtenham informações de cache de esquema do db/schema_cache.yml
(gerado pelo bin/rails db:schema:cache:dump
), em vez de ter que enviar uma consulta ao banco de dados para obter essas informações. O valor padrão é true
.
3.7.33 config.active_record.cache_versioning
Indica se deve ser usado um método #cache_key
estável que é acompanhado por uma versão em mudança no método #cache_version
.
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.2 | true |
3.7.34 config.active_record.collection_cache_versioning
Permite que a mesma chave de cache seja reutilizada quando o objeto sendo armazenado em cache do tipo ActiveRecord::Relation
é alterado, movendo as informações voláteis (máximo atualizado em e contagem) da chave de cache da relação para a versão de cache para suportar a reciclagem da chave de cache.
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
6.0 | true |
3.7.35 config.active_record.has_many_inversing
Permite definir o registro inverso ao percorrer associações de belongs_to
para has_many
.
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
6.1 | true |
3.7.36 config.active_record.automatic_scope_inversing
Permite inferir automaticamente o inverse_of
para associações com um escopo.
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.0 | true |
3.7.37 config.active_record.destroy_association_async_job
Permite especificar o job que será usado para destruir os registros associados em segundo plano. O valor padrão é ActiveRecord::DestroyAssociationAsyncJob
.
3.7.38 config.active_record.destroy_association_async_batch_size
Permite especificar o número máximo de registros que serão destruídos em um job em segundo plano pela opção de associação dependent: :destroy_async
. Tudo igual, um tamanho de lote menor enfileirará mais jobs em segundo plano de curta duração, enquanto um tamanho de lote maior enfileirará menos jobs em segundo plano de longa duração. Este opção tem o valor padrão nil
, o que fará com que todos os registros dependentes de uma determinada associação sejam destruídos no mesmo job em segundo plano.
3.7.39 config.active_record.queues.destroy
Permite especificar a fila do Active Job a ser usada para jobs de destruição. Quando esta opção é nil
, os jobs de purga são enviados para a fila padrão do Active Job (veja config.active_job.default_queue_name
). O valor padrão é nil
.
3.7.40 config.active_record.enumerate_columns_in_select_statements
Quando true
, sempre incluirá os nomes das colunas em declarações SELECT
e evitará consultas de SELECT * FROM ...
com asterisco. Isso evita erros de cache de declaração preparada ao adicionar colunas a um banco de dados PostgreSQL, por exemplo. O valor padrão é false
.
3.7.41 config.active_record.verify_foreign_keys_for_fixtures
Garante que todas as restrições de chave estrangeira sejam válidas após a carga dos fixtures nos testes. Suportado apenas pelo PostgreSQL e SQLite.
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.0 | true |
3.7.42 config.active_record.raise_on_assign_to_attr_readonly
Permite lançar um erro ao atribuir valores a atributos attr_readonly
. O comportamento anterior permitia a atribuição, mas silenciosamente não persistia as alterações no banco de dados.
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.7.43 config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction
Quando várias instâncias do Active Record alteram o mesmo registro dentro de uma transação, o Rails executa os callbacks after_commit
ou after_rollback
apenas em uma delas. Essa opção especifica como o Rails escolhe qual instância receberá os callbacks.
Quando true
, os callbacks transacionais são executados na primeira instância a ser salva, mesmo que seu estado de instância possa estar desatualizado.
Quando false
, os callbacks transacionais são executados nas instâncias com o estado de instância mais recente. Essas instâncias são escolhidas da seguinte forma:
- Em geral, execute os callbacks transacionais na última instância a salvar um determinado registro dentro da transação.
- Existem duas exceções:
- Se o registro for criado dentro da transação e, em seguida, atualizado por outra instância, os callbacks
after_create_commit
serão executados na segunda instância. Isso ocorre em vez dos callbacksafter_update_commit
que seriam executados com base no estado dessa instância. - Se o registro for excluído dentro da transação, os callbacks
after_destroy_commit
serão disparados na última instância excluída, mesmo que uma instância desatualizada posteriormente tenha realizado uma atualização (que não terá afetado nenhuma linha).
- Se o registro for criado dentro da transação e, em seguida, atualizado por outra instância, os callbacks
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
7.1 | false |
3.7.44 config.active_record.default_column_serializer
A implementação do serializador a ser usada se nenhum for especificado explicitamente para uma determinada coluna.
Historicamente, serialize
e store
, embora permitam o uso de implementações alternativas de serializador, usariam YAML
por padrão, mas não é um formato muito eficiente e pode ser a fonte de vulnerabilidades de segurança se não for usado com cuidado.
Portanto, é recomendável preferir formatos mais restritos e limitados para a serialização de banco de dados.
Infelizmente, não há realmente nenhuma opção padrão adequada disponível na biblioteca padrão do Ruby. JSON
poderia funcionar como um formato, mas as gemas json
converterão tipos não suportados em strings, o que pode levar a bugs.
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | YAML |
7.1 | nil |
3.7.45 config.active_record.run_after_transaction_callbacks_in_order_defined
Se verdadeiro, os callbacks after_commit
são executados na ordem em que são definidos em um modelo. Se falso, eles são executados na ordem inversa.
Todos os outros callbacks são sempre executados na ordem em que são definidos em um modelo (a menos que você use prepend: true
).
O valor padrão depende da versão de destino do config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.7.46 config.active_record.query_log_tags_enabled
Especifica se habilitar ou não comentários de consulta em nível de adaptador. O padrão é false
.
NOTA: Quando isso é definido como true
, as declarações preparadas do banco de dados serão desabilitadas automaticamente.
3.7.47 config.active_record.query_log_tags
Define um Array
especificando as tags chave/valor a serem inseridas em um comentário SQL. O padrão é [ :application ]
, uma tag predefinida que retorna o nome da aplicação.
3.7.48 config.active_record.query_log_tags_format
Um Symbol
especificando o formatador a ser usado para as tags. Os valores válidos são :sqlcommenter
e :legacy
.
O valor padrão depende da versão de destino do config.load_defaults
:
| A partir da versão | O valor padrão é |
| --------------------- | -------------------- |
| (original) | :legacy
|
| 7.1 | :sqlcommenter
|
3.7.49 config.active_record.cache_query_log_tags
Especifica se deve ou não habilitar o cache das tags de log de consulta. Para aplicativos que possuem um grande número de consultas, o cache das tags de log de consulta pode fornecer um benefício de desempenho quando o contexto não muda durante a vida útil da solicitação ou execução do trabalho. O valor padrão é false
.
3.7.50 config.active_record.schema_cache_ignored_tables
Define a lista de tabelas que devem ser ignoradas ao gerar o cache do esquema. Aceita um Array
de strings, representando os nomes das tabelas, ou expressões regulares.
3.7.51 config.active_record.verbose_query_logs
Especifica se os locais de origem dos métodos que chamam consultas ao banco de dados devem ser registrados abaixo das consultas relevantes. Por padrão, a sinalização é true
no ambiente de desenvolvimento e false
em todos os outros ambientes.
3.7.52 config.active_record.sqlite3_adapter_strict_strings_by_default
Especifica se o SQLite3Adapter deve ser usado em um modo de strings estritas. O uso de um modo de strings estritas desativa literais de string entre aspas duplas.
O SQLite possui algumas peculiaridades em relação a literais de string entre aspas duplas. Primeiro, ele tenta considerar as strings entre aspas duplas como nomes de identificadores, mas se eles não existirem, então as considera como literais de string. Por causa disso, erros de digitação podem passar despercebidos. Por exemplo, é possível criar um índice para uma coluna que não existe. Consulte a documentação do SQLite para obter mais detalhes.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.7.53 config.active_record.async_query_executor
Especifica como as consultas assíncronas são agrupadas.
O valor padrão é nil
, o que significa que load_async
está desativado e, em vez disso, as consultas são executadas diretamente em primeiro plano. Para que as consultas sejam realmente executadas de forma assíncrona, ele deve ser definido como :global_thread_pool
ou :multi_thread_pool
.
:global_thread_pool
usará um único pool para todos os bancos de dados aos quais o aplicativo se conecta. Essa é a configuração preferida para aplicativos com apenas um banco de dados ou aplicativos que consultam apenas um fragmento de banco de dados de cada vez.
:multi_thread_pool
usará um pool por banco de dados, e o tamanho de cada pool pode ser configurado individualmente em database.yml
por meio das propriedades max_threads
e min_thread
. Isso pode ser útil para aplicativos que consultam regularmente vários bancos de dados ao mesmo tempo e que precisam definir com mais precisão a concorrência máxima.
3.7.54 config.active_record.global_executor_concurrency
Usado em conjunto com config.active_record.async_query_executor = :global_thread_pool
, define quantas consultas assíncronas podem ser executadas simultaneamente.
O valor padrão é 4
.
Este número deve ser considerado em conjunto com o tamanho do pool de conexões configurado em database.yml
. O pool de conexões deve ser grande o suficiente para acomodar tanto as threads em primeiro plano (por exemplo, threads do servidor da web ou do trabalhador de tarefas) quanto as threads em segundo plano.
3.7.55 config.active_record.allow_deprecated_singular_associations_name
Isso permite o comportamento obsoleto em que associações singulares podem ser referenciadas pelo nome no plural em cláusulas where
. Definir isso como false
é mais eficiente em termos de desempenho.
class Comment < ActiveRecord::Base
belongs_to :post
end
Comment.where(post: post_id).count # => 5
# Quando `allow_deprecated_singular_associations_name` é true:
Comment.where(posts: post_id).count # => 5 (aviso de obsolescência)
# Quando `allow_deprecated_singular_associations_name` é false:
Comment.where(posts: post_id).count # => erro
O valor padrão depende da versão de destino config.load_defaults
:
| A partir da versão | O valor padrão é |
| --------------------- | -------------------- |
| (original) | true
|
| 7.1 | false
|
3.7.56 config.active_record.yaml_column_permitted_classes
O valor padrão é [Symbol]
. Permite que as aplicações incluam classes permitidas adicionais para safe_load()
no ActiveRecord::Coders::YAMLColumn
.
3.7.57 config.active_record.use_yaml_unsafe_load
O valor padrão é false
. Permite que as aplicações optem por usar unsafe_load
no ActiveRecord::Coders::YAMLColumn
.
3.7.58 config.active_record.raise_int_wider_than_64bit
O valor padrão é true
. Determina se deve lançar uma exceção ou não quando o adaptador PostgreSQL recebe um número inteiro que é maior do que a representação de 64 bits com sinal.
3.7.59 ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans
e ActiveRecord::ConnectionAdapters::TrilogyAdapter.emulate_booleans
Controla se o adaptador MySQL do Active Record considerará todas as colunas tinyint(1)
como booleanas. O valor padrão é true
.
3.7.60 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_tables
Controla se as tabelas do banco de dados criadas pelo PostgreSQL devem ser "unlogged", o que pode aumentar o desempenho, mas adiciona o risco de perda de dados se o banco de dados falhar. É altamente recomendado que você não habilite isso em um ambiente de produção. O valor padrão é false
em todos os ambientes.
Para habilitar isso nos testes:
# config/environments/test.rb
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.create_unlogged_tables = true
end
3.7.61 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type
Controla qual tipo nativo o adaptador PostgreSQL do Active Record deve usar quando você chama datetime
em uma migração ou esquema. Ele recebe um símbolo que deve corresponder a um dos NATIVE_DATABASE_TYPES
configurados. O valor padrão é :timestamp
, o que significa que t.datetime
em uma migração criará uma coluna "timestamp without time zone".
Para usar "timestamp with time zone":
# config/application.rb
ActiveSupport.on_load(:active_record_postgresqladapter) do
self.datetime_type = :timestamptz
end
Você deve executar bin/rails db:migrate
para reconstruir seu schema.rb se você alterar isso.
3.7.62 ActiveRecord::SchemaDumper.ignore_tables
Aceita um array de tabelas que não devem ser incluídas em nenhum arquivo de esquema gerado.
3.7.63 ActiveRecord::SchemaDumper.fk_ignore_pattern
Permite definir uma expressão regular diferente que será usada para decidir se o nome de uma chave estrangeira deve ser incluído no db/schema.rb ou não. Por padrão, os nomes de chaves estrangeiras que começam com fk_rails_
não são exportados para o dump do esquema do banco de dados. O valor padrão é /^fk_rails_[0-9a-f]{10}$/
.
3.7.64 config.active_record.encryption.hash_digest_class
Define o algoritmo de digest usado pelo Active Record Encryption.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | OpenSSL::Digest::SHA1 |
7.1 | OpenSSL::Digest::SHA256 |
3.7.65 config.active_record.encryption.support_sha1_for_non_deterministic_encryption
Habilita o suporte para descriptografar dados existentes criptografados usando uma classe de digest SHA-1. Quando false
, ele só suportará o digest configurado em config.active_record.encryption.hash_digest_class
.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
7.1 | false |
3.8 Configurando o Action Controller
config.action_controller
inclui várias configurações:
3.8.1 config.action_controller.asset_host
Define o host para os assets. Útil quando CDNs são usados para hospedar os assets em vez do próprio servidor da aplicação. Você só deve usar isso se tiver uma configuração diferente para o Action Mailer, caso contrário, use config.asset_host
.
3.8.2 config.action_controller.perform_caching
Configura se a aplicação deve executar os recursos de cache fornecidos pelo componente Action Controller ou não. Defina como false
no ambiente de desenvolvimento e true
na produção. Se não for especificado, o valor padrão será true
.
3.8.3 config.action_controller.default_static_extension
Configura a extensão usada para páginas em cache. O valor padrão é .html
.
3.8.4 config.action_controller.include_all_helpers
Configura se todos os helpers de visualização estão disponíveis em todos os lugares ou estão limitados ao controlador correspondente. Se definido como false
, os métodos do UsersHelper
estão disponíveis apenas para visualizações renderizadas como parte do UsersController
. Se true
, os métodos do UsersHelper
estão disponíveis em todos os lugares. O comportamento de configuração padrão (quando essa opção não é definida explicitamente como true
ou false
) é que todos os helpers de visualização estão disponíveis para cada controlador.
3.8.5 config.action_controller.logger
Aceita um logger que esteja em conformidade com a interface do Log4r ou a classe de logger padrão do Ruby, que é então usado para registrar informações do Action Controller. Defina como nil
para desativar o registro.
3.8.6 config.action_controller.request_forgery_protection_token
Define o nome do parâmetro de token para RequestForgery. Chamando protect_from_forgery
define-o como :authenticity_token
por padrão.
3.8.7 config.action_controller.allow_forgery_protection
Ativa ou desativa a proteção CSRF. Por padrão, isso é false
no ambiente de teste e true
em todos os outros ambientes.
3.8.8 config.action_controller.forgery_protection_origin_check
Configura se o cabeçalho HTTP Origin
deve ser verificado em relação à origem do site como uma defesa CSRF adicional.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.0 | true |
3.8.9 config.action_controller.per_form_csrf_tokens
Configura se os tokens CSRF são válidos apenas para o método/ação em que foram gerados.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.0 | true |
3.8.10 config.action_controller.default_protect_from_forgery
Determina se a proteção contra falsificação é adicionada em ActionController::Base
.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.2 | true |
3.8.11 config.action_controller.relative_url_root
Pode ser usado para informar ao Rails que você está implantando em um subdiretório. O padrão é
config.relative_url_root
.
3.8.12 config.action_controller.permit_all_parameters
Define que todos os parâmetros para atribuição em massa são permitidos por padrão. O valor padrão é false
.
3.8.13 config.action_controller.action_on_unpermitted_parameters
Controla o comportamento quando são encontrados parâmetros que não são explicitamente permitidos. O valor padrão é :log
nos ambientes de teste e desenvolvimento, false
caso contrário. Os valores podem ser:
false
para não tomar nenhuma ação:log
para emitir um eventoActiveSupport::Notifications.instrument
no tópicounpermitted_parameters.action_controller
e registrar no nível DEBUG:raise
para lançar uma exceçãoActionController::UnpermittedParameters
3.8.14 config.action_controller.always_permitted_parameters
Define uma lista de parâmetros permitidos que são permitidos por padrão. Os valores padrão são ['controller', 'action']
.
3.8.15 config.action_controller.enable_fragment_cache_logging
Determina se deve registrar leituras e gravações de cache de fragmentos em formato detalhado da seguinte forma:
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]
Por padrão, está definido como false
, o que resulta na seguinte saída:
Rendered messages/_message.html.erb in 1.2 ms [cache hit]
Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss]
3.8.16 config.action_controller.raise_on_open_redirects
Gera um ActionController::Redirecting::UnsafeRedirectError
quando ocorre um redirecionamento aberto não permitido.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.0 | true |
3.8.17 config.action_controller.log_query_tags_around_actions
Determina se o contexto do controlador para tags de consulta será atualizado automaticamente por meio de um around_filter
. O valor padrão é true
.
3.8.18 config.action_controller.wrap_parameters_by_default
Configura o ParamsWrapper
para envolver solicitações json por padrão.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.0 | true |
3.8.19 ActionController::Base.wrap_parameters
Configura o ParamsWrapper
. Isso pode ser chamado no nível superior ou em controladores individuais.
3.8.20 config.action_controller.allow_deprecated_parameters_hash_equality
Controla o comportamento de ActionController::Parameters#==
com argumentos Hash
. O valor da configuração determina se uma instância de ActionController::Parameters
é igual a um Hash
equivalente.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
7.1 | false |
3.9 Configurando o Action Dispatch
3.9.1 config.action_dispatch.cookies_serializer
Especifica qual serializador usar para cookies. Aceita os mesmos valores que config.active_support.message_serializer
, além de :hybrid
, que é um alias para :json_allow_marshal
.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | :marshal |
7.0 | :json |
3.9.2 config.action_dispatch.debug_exception_log_level
Configura o nível de log usado pelo middleware DebugExceptions ao registrar exceções não capturadas durante as solicitações.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | :fatal |
7.1 | :error |
3.9.3 config.action_dispatch.default_headers
É um hash com cabeçalhos HTTP que são definidos por padrão em cada resposta.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) |
|
7.0 |
|
7.1 |
|
3.9.4 config.action_dispatch.default_charset
Especifica o conjunto de caracteres padrão para todas as renderizações. O padrão é nil
.
3.9.5 config.action_dispatch.tld_length
Define o comprimento do TLD (domínio de nível superior) para a aplicação. O padrão é 1
.
3.9.6 config.action_dispatch.ignore_accept_header
É usado para determinar se deve ignorar os cabeçalhos de aceitação de uma solicitação. O padrão é false
.
3.9.7 config.action_dispatch.x_sendfile_header
Especifica o cabeçalho X-Sendfile específico do servidor. Isso é útil para o envio acelerado de arquivos pelo servidor. Por exemplo, pode ser definido como 'X-Sendfile' para o Apache.
3.9.8 config.action_dispatch.http_auth_salt
Define o valor do salt de autenticação HTTP. O padrão é 'http authentication'
.
3.9.9 config.action_dispatch.signed_cookie_salt
Define o valor do salt de cookies assinados. O padrão é 'signed cookie'
.
3.9.10 config.action_dispatch.encrypted_cookie_salt
Define o valor do salt de cookies criptografados. O padrão é 'encrypted cookie'
.
3.9.11 config.action_dispatch.encrypted_signed_cookie_salt
Define o valor do salt de cookies assinados e criptografados. O padrão é 'signed encrypted cookie'
.
3.9.12 config.action_dispatch.authenticated_encrypted_cookie_salt
Define o salt do cookie criptografado autenticado. O padrão é 'authenticated encrypted cookie'
.
3.9.13 config.action_dispatch.encrypted_cookie_cipher
Define o cifrador a ser usado para cookies criptografados. O padrão é "aes-256-gcm"
.
3.9.14 config.action_dispatch.signed_cookie_digest
Define o algoritmo de digest usado para cookies assinados. O valor padrão é "SHA1"
.
3.9.15 config.action_dispatch.cookies_rotations
Permite a rotação de segredos, cifras e digests para cookies criptografados e assinados.
3.9.16 config.action_dispatch.use_authenticated_cookie_encryption
Controla se os cookies assinados e criptografados usam a cifra AES-256-GCM ou a cifra mais antiga AES-256-CBC.
O valor padrão depende da versão alvo config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.2 | true |
3.9.17 config.action_dispatch.use_cookies_with_metadata
Habilita a gravação de cookies com metadados incorporados.
O valor padrão depende da versão alvo config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
6.0 | true |
3.9.18 config.action_dispatch.perform_deep_munge
Configura se o método deep_munge
deve ser executado nos parâmetros.
Consulte o Guia de Segurança para mais informações.
O valor padrão é true
.
3.9.19 config.action_dispatch.rescue_responses
Configura quais exceções são atribuídas a um status HTTP. Aceita um hash e você pode especificar pares de exceção/status. Por padrão, isso é definido como:
config.action_dispatch.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,
'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
}
Quaisquer exceções que não forem configuradas serão mapeadas para o status 500 Internal Server Error.
3.9.20 config.action_dispatch.cookies_same_site_protection
Configura o valor padrão do atributo SameSite
ao definir cookies.
Quando definido como nil
, o atributo SameSite
não é adicionado. Para permitir que o valor do atributo SameSite
seja configurado dinamicamente com base na solicitação, um proc pode ser especificado. Por exemplo:
config.action_dispatch.cookies_same_site_protection = ->(request) do
:strict unless request.user_agent == "TestAgent"
end
O valor padrão depende da versão alvo config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | nil |
6.1 | :lax |
3.9.21 config.action_dispatch.ssl_default_redirect_status
Configura o código de status HTTP padrão usado ao redirecionar solicitações diferentes de GET/HEAD de HTTP para HTTPS no middleware ActionDispatch::SSL
.
O valor padrão depende da versão alvo config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | 307 |
6.1 | 308 |
3.9.22 config.action_dispatch.log_rescued_responses
Habilita o registro de exceções não tratadas configuradas em rescue_responses
. O valor padrão é true
.
3.9.23 ActionDispatch::Callbacks.before
Recebe um bloco de código para ser executado antes da solicitação.
3.9.24 ActionDispatch::Callbacks.after
Recebe um bloco de código para ser executado após a solicitação.
3.10 Configurando Action View
config.action_view
inclui um pequeno número de configurações:
3.10.1 config.action_view.cache_template_loading
Controla se os templates devem ser recarregados a cada solicitação. O valor padrão é !config.enable_reloading
.
3.10.2 config.action_view.field_error_proc
Fornece um gerador HTML para exibir erros provenientes do Active Model. O bloco é avaliado no contexto de um template Action View. O valor padrão é
Proc.new { |html_tag, instance| content_tag :div, html_tag, class: "field_with_errors" }
3.10.3 config.action_view.default_form_builder
Informa ao Rails qual construtor de formulário usar por padrão. O valor padrão é
ActionView::Helpers::FormBuilder
. Se você deseja que sua classe de construtor de formulário seja
carregada após a inicialização (para que seja recarregada a cada solicitação no desenvolvimento),
você pode passá-la como uma String
.
3.10.4 config.action_view.logger
Aceita um logger que esteja em conformidade com a interface do Log4r ou a classe de logger padrão do Ruby, que é então usado para registrar informações do Action View. Defina como nil
para desativar o registro.
3.10.5 config.action_view.erb_trim_mode
Define o modo de corte a ser usado pelo ERB. O valor padrão é '-'
, que ativa o corte de espaços finais e quebras de linha ao usar <%= -%>
ou <%= =%>
. Consulte a documentação do Erubis para obter mais informações.
3.10.6 config.action_view.frozen_string_literal
Compila o template ERB com o comentário mágico # frozen_string_literal: true
, tornando todas as literais de string congeladas e economizando alocações. Defina como true
para ativá-lo em todas as visualizações.
3.10.7 config.action_view.embed_authenticity_token_in_remote_forms
Permite definir o comportamento padrão para authenticity_token
em formulários com remote: true
. Por padrão, está definido como false
, o que significa que os formulários remotos não incluirão authenticity_token
, o que é útil quando você está fragmentando em cache o formulário. Os formulários remotos obtêm a autenticidade da tag meta
, portanto, a incorporação é desnecessária, a menos que você dê suporte a navegadores sem JavaScript. Nesse caso, você pode passar authenticity_token: true
como uma opção de formulário ou definir essa configuração como true
.
3.10.8 config.action_view.prefix_partial_path_with_controller_namespace
Determina se os parciais são procurados em um subdiretório em modelos renderizados a partir de controladores com namespace. Por exemplo, considere um controlador chamado Admin::ArticlesController
que renderiza este modelo:
<%= render @article %>
A configuração padrão é true
, o que usa o parcial em /admin/articles/_article.erb
. Definir o valor como false
renderia /articles/_article.erb
, que é o mesmo comportamento de renderização de um controlador sem namespace, como ArticlesController
.
3.10.9 config.action_view.automatically_disable_submit_tag
Determina se submit_tag
deve ser desativado automaticamente ao ser clicado, o padrão é true
.
3.10.10 config.action_view.debug_missing_translation
Determina se a chave de tradução ausente deve ser envolvida em uma tag <span>
ou não. O padrão é true
.
3.10.11 config.action_view.form_with_generates_remote_forms
Determina se form_with
gera formulários remotos ou não.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
5.1 | true |
6.1 | false |
3.10.12 config.action_view.form_with_generates_ids
Determina se form_with
gera ids nos inputs.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.2 | true |
3.10.13 config.action_view.default_enforce_utf8
Determina se os formulários são gerados com uma tag oculta que força versões mais antigas do Internet Explorer a enviar formulários codificados em UTF-8.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
6.0 | false |
3.10.14 config.action_view.image_loading
Especifica um valor padrão para o atributo loading
das tags <img>
renderizadas pelo helper image_tag
. Por exemplo, quando definido como "lazy"
, as tags <img>
renderizadas por image_tag
incluirão loading="lazy"
, o que instrui o navegador a esperar até que uma imagem esteja próxima da viewport para carregá-la. (Esse valor ainda pode ser substituído por imagem, passando, por exemplo, loading: "eager"
para image_tag
.) O padrão é nil
.
3.10.15 config.action_view.image_decoding
Especifica um valor padrão para o atributo decoding
das tags <img>
renderizadas pelo helper image_tag
. O padrão é nil
.
3.10.16 config.action_view.annotate_rendered_view_with_filenames
Determina se os nomes dos arquivos de modelo serão anotados nas visualizações renderizadas. O valor padrão é false
.
3.10.17 config.action_view.preload_links_header
Determina se javascript_include_tag
e stylesheet_link_tag
irão gerar um cabeçalho Link
que pré-carrega os ativos.
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | nil |
6.1 | true |
3.10.18 config.action_view.button_to_generates_button_tag
Determina se button_to
irá renderizar o elemento <button>
, independentemente de o conteúdo ser passado como primeiro argumento ou como um bloco.
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.0 | true |
3.10.19 config.action_view.apply_stylesheet_media_default
Determina se stylesheet_link_tag
irá renderizar screen
como o valor padrão para o atributo media
quando não for fornecido.
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | true |
7.0 | false |
3.10.20 config.action_view.prepend_content_exfiltration_prevention
Determina se os ajudantes form_tag
e button_to
irão produzir tags HTML com prefixo seguro para o navegador (mas tecnicamente inválido) que garante que seu conteúdo não possa ser capturado por nenhuma tag não fechada anterior. O valor padrão é false
.
3.10.21 config.action_view.sanitizer_vendor
Configura o conjunto de sanitizadores HTML usados pelo Action View, definindo ActionView::Helpers::SanitizeHelper.sanitizer_vendor
. O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é | Que analisa a marcação como |
---|---|---|
(original) | Rails::HTML4::Sanitizer |
HTML4 |
7.1 | Rails::HTML5::Sanitizer (ver NOTA) |
HTML5 |
NOTA: Rails::HTML5::Sanitizer
não é suportado no JRuby, então em plataformas JRuby o Rails usará Rails::HTML4::Sanitizer
.
3.11 Configurando o Action Mailbox
config.action_mailbox
fornece as seguintes opções de configuração:
3.11.1 config.action_mailbox.logger
Contém o logger usado pelo Action Mailbox. Aceita um logger que segue a interface do Log4r ou a classe de logger padrão do Ruby. O padrão é Rails.logger
.
config.action_mailbox.logger = ActiveSupport::Logger.new(STDOUT)
3.11.2 config.action_mailbox.incinerate_after
Aceita uma ActiveSupport::Duration
indicando quanto tempo após o processamento os registros ActionMailbox::InboundEmail
devem ser destruídos. O padrão é 30.days
.
# Destruir os emails recebidos 14 dias após o processamento.
config.action_mailbox.incinerate_after = 14.days
3.11.3 config.action_mailbox.queues.incineration
Aceita um símbolo indicando a fila do Active Job a ser usada para os trabalhos de incineração. Quando esta opção é nil
, os trabalhos de incineração são enviados para a fila padrão do Active Job (veja config.active_job.default_queue_name
).
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | :action_mailbox_incineration |
6.1 | nil |
3.11.4 config.action_mailbox.queues.routing
Aceita um símbolo indicando a fila do Active Job a ser usada para os trabalhos de roteamento. Quando esta opção é nil
, os trabalhos de roteamento são enviados para a fila padrão do Active Job (veja config.active_job.default_queue_name
).
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | :action_mailbox_routing |
6.1 | nil |
3.11.5 config.action_mailbox.storage_service
Aceita um símbolo que indica o serviço Active Storage a ser usado para fazer upload de emails. Quando essa opção é nil
, os emails são enviados para o serviço Active Storage padrão (veja config.active_storage.service
).
3.12 Configurando o Action Mailer
Existem várias configurações disponíveis em config.action_mailer
:
3.12.1 config.action_mailer.asset_host
Define o host para os assets. Útil quando CDNs são usados para hospedar os assets em vez do próprio servidor de aplicativos. Você só deve usar isso se tiver uma configuração diferente para o Action Controller, caso contrário, use config.asset_host
.
3.12.2 config.action_mailer.logger
Aceita um logger que segue a interface do Log4r ou a classe de logger padrão do Ruby, que é usado para registrar informações do Action Mailer. Defina como nil
para desativar o registro.
3.12.3 config.action_mailer.smtp_settings
Permite configuração detalhada para o método de entrega :smtp
. Aceita um hash de opções, que podem incluir qualquer uma dessas opções:
:address
- Permite que você use um servidor de email remoto. Basta alterá-lo de sua configuração padrão "localhost".:port
- Caso o seu servidor de email não esteja em execução na porta 25, você pode alterá-la.:domain
- Se você precisar especificar um domínio HELO, pode fazê-lo aqui.:user_name
- Se o seu servidor de email exigir autenticação, defina o nome de usuário nesta configuração.:password
- Se o seu servidor de email exigir autenticação, defina a senha nesta configuração.:authentication
- Se o seu servidor de email exigir autenticação, você precisa especificar o tipo de autenticação aqui. Isso é um símbolo e pode ser:plain
,:login
ou:cram_md5
.:enable_starttls
- Use STARTTLS ao se conectar ao seu servidor SMTP e falhe se não for suportado. O valor padrão éfalse
.:enable_starttls_auto
- Detecta se o STARTTLS está habilitado em seu servidor SMTP e começa a usá-lo. O valor padrão étrue
.:openssl_verify_mode
- Ao usar TLS, você pode definir como o OpenSSL verifica o certificado. Isso é útil se você precisar validar um certificado autoassinado e/ou um certificado curinga. Isso pode ser uma das constantes de verificação do OpenSSL,:none
ou:peer
-- ou a constante diretamenteOpenSSL::SSL::VERIFY_NONE
ouOpenSSL::SSL::VERIFY_PEER
, respectivamente.:ssl/:tls
- Habilita a conexão SMTP para usar SMTP/TLS (SMTPS: conexão SMTP sobre TLS direto).:open_timeout
- Número de segundos para aguardar ao tentar abrir uma conexão.:read_timeout
- Número de segundos para aguardar até que uma chamada de leitura (read(2)) seja encerrada.
Além disso, é possível passar qualquer opção de configuração que o Mail::SMTP
respeita.
3.12.4 config.action_mailer.smtp_timeout
Permite configurar os valores :open_timeout
e :read_timeout
para o método de entrega :smtp
.
O valor padrão depende da versão de destino de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | nil |
7.0 | 5 |
3.12.5 config.action_mailer.sendmail_settings
Permite configuração detalhada para o método de entrega sendmail
. Aceita um hash de opções, que podem incluir qualquer uma dessas opções:
:location
- A localização do executável sendmail. O padrão é/usr/sbin/sendmail
.:arguments
- Os argumentos da linha de comando. O padrão é%w[ -i ]
.
3.12.6 config.action_mailer.raise_delivery_errors
Especifica se deve gerar um erro se a entrega do email não puder ser concluída. O padrão é true
.
3.12.7 config.action_mailer.delivery_method
Define o método de entrega e o padrão é :smtp
. Consulte a seção de configuração no guia do Action Mailer para mais informações.
3.12.8 config.action_mailer.perform_deliveries
Especifica se o email será realmente entregue e é true
por padrão. Pode ser conveniente definir como false
para testes.
3.12.9 config.action_mailer.default_options
Configura as opções padrão do Action Mailer. Use para definir opções como from
ou reply_to
para cada mailer. Por padrão, são:
mime_version: "1.0",
charset: "UTF-8",
content_type: "text/plain",
parts_order: ["text/plain", "text/enriched", "text/html"]
Atribua um hash para definir opções adicionais:
config.action_mailer.default_options = {
from: "[email protected]"
}
3.12.10 config.action_mailer.observers
Registra observadores que serão notificados quando o email for entregue.
config.action_mailer.observers = ["MailObserver"]
3.12.11 config.action_mailer.interceptors
Registra interceptadores que serão chamados antes do envio do email.
config.action_mailer.interceptors = ["MailInterceptor"]
3.12.12 config.action_mailer.preview_interceptors
Registra interceptadores que serão chamados antes da visualização do email.
config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]
3.12.13 config.action_mailer.preview_paths
Especifica os locais das visualizações dos mailers. Adicionar caminhos a essa opção de configuração fará com que esses caminhos sejam usados na busca por visualizações dos mailers.
config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"
3.12.14 config.action_mailer.show_previews
Ativa ou desativa as visualizações dos mailers. Por padrão, isso é true
no ambiente de desenvolvimento.
config.action_mailer.show_previews = false
3.12.15 config.action_mailer.perform_caching
Especifica se os templates dos mailers devem realizar o cache de fragmentos ou não. Se não for especificado, o padrão será true
.
3.12.16 config.action_mailer.deliver_later_queue_name
Especifica a fila do Active Job a ser usada para o job de entrega padrão (veja config.action_mailer.delivery_job
). Quando essa opção é definida como nil
, os jobs de entrega são enviados para a fila padrão do Active Job (veja config.active_job.default_queue_name
).
As classes de mailer podem substituir isso para usar uma fila diferente. Observe que isso só se aplica ao usar o job de entrega padrão. Se o mailer estiver usando um job personalizado, sua fila será usada.
Certifique-se de que o adaptador do Active Job também esteja configurado para processar a fila especificada, caso contrário, os jobs de entrega podem ser ignorados silenciosamente.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | :mailers |
6.1 | nil |
3.12.17 config.action_mailer.delivery_job
Especifica o job de entrega para o mailer.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | ActionMailer::MailDeliveryJob |
6.0 | "ActionMailer::MailDeliveryJob" |
3.13 Configurando o Active Support
Existem algumas opções de configuração disponíveis no Active Support:
3.13.1 config.active_support.bare
Ativa ou desativa o carregamento de active_support/all
ao inicializar o Rails. O padrão é nil
, o que significa que active_support/all
é carregado.
3.13.2 config.active_support.test_order
Define a ordem em que os casos de teste são executados. Os valores possíveis são :random
e :sorted
. O padrão é :random
.
3.13.3 config.active_support.escape_html_entities_in_json
Ativa ou desativa a escapagem de entidades HTML na serialização JSON. O padrão é true
.
3.13.4 config.active_support.use_standard_json_time_format
Ativa ou desativa a serialização de datas no formato ISO 8601. O padrão é true
.
3.13.5 config.active_support.time_precision
Define a precisão dos valores de tempo codificados em JSON. O padrão é 3
.
3.13.6 config.active_support.hash_digest_class
Permite configurar a classe de digest para gerar digests não sensíveis, como o cabeçalho ETag.
O valor padrão depende da versão de destino config.load_defaults
:
| A partir da versão | O valor padrão é |
| --------------------- | -------------------- |
| (original) | OpenSSL::Digest::MD5
|
| 5.2 | OpenSSL::Digest::SHA1
|
| 7.0 | OpenSSL::Digest::SHA256
|
3.13.7 config.active_support.key_generator_hash_digest_class
Permite configurar a classe de digest para derivar segredos da base de segredos configurada, como para cookies criptografados.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | OpenSSL::Digest::SHA1 |
7.0 | OpenSSL::Digest::SHA256 |
3.13.8 config.active_support.use_authenticated_message_encryption
Especifica se deve usar a criptografia autenticada AES-256-GCM como o cifrador padrão para criptografar mensagens em vez de AES-256-CBC.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.2 | true |
3.13.9 config.active_support.message_serializer
Especifica o serializador padrão usado pelas instâncias ActiveSupport::MessageEncryptor
e ActiveSupport::MessageVerifier
. Para facilitar a migração entre
serializadores, os serializadores fornecidos incluem um mecanismo de fallback para
suportar vários formatos de deserialização:
Serializador | Serializar e deserializar | Deserialização de fallback |
---|---|---|
: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 |
AVISO: Marshal
é um vetor potencial para ataques de deserialização em casos
em que um segredo de assinatura de mensagem tenha sido vazado. Se possível, escolha um
serializador que não suporte Marshal
.
Os serializadores :message_pack
e :message_pack_allow_marshal
suportam
a ida e volta de alguns tipos Ruby que não são suportados por JSON, como Symbol
.
Eles também podem fornecer melhor desempenho e tamanhos menores de carga útil. No entanto,
eles requerem a gem msgpack
.
Cada um dos serializadores acima emitirá uma notificação de evento message_serializer_fallback.active_support
quando eles recorrerem a um formato de deserialização alternativo,
permitindo que você acompanhe com que frequência ocorrem esses fallbacks.
Alternativamente, você pode especificar qualquer objeto serializador que responda aos métodos dump
e
load
. Por exemplo:
config.active_job.message_serializer = YAML
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | :marshal |
7.1 | :json_allow_marshal |
3.13.10 config.active_support.use_message_serializer_for_metadata
Quando true
, permite uma otimização de desempenho que serializa dados de mensagem e
metadados juntos. Isso altera o formato da mensagem, portanto, mensagens serializadas desta
forma não podem ser lidas por versões mais antigas (< 7.1) do Rails. No entanto, mensagens que
usam o formato antigo ainda podem ser lidas, independentemente de essa otimização estar
habilitada.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.13.11 config.active_support.cache_format_version
Especifica qual formato de serialização usar para o cache. Os valores possíveis são
6.1
, 7.0
e 7.1
.
Os formatos 6.1
, 7.0
e 7.1
usam todos Marshal
para o codificador padrão, mas
7.0
usa uma representação mais eficiente para entradas de cache e 7.1
inclui
uma otimização adicional para valores de string simples, como fragmentos de visualização.
Todos os formatos são compatíveis com versões anteriores e posteriores, o que significa que as entradas de cache escritas em um formato podem ser lidas ao usar outro formato. Esse comportamento facilita a migração entre formatos sem invalidar todo o cache.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | 6.1 |
7.0 | 7.0 |
7.1 | 7.1 |
3.13.12 config.active_support.deprecation
Configura o comportamento das mensagens de depreciação. As opções são :raise
, :stderr
, :log
, :notify
e :silence
.
Nos arquivos config/environments
gerados por padrão, isso é definido como :log
para desenvolvimento e :stderr
para teste, e é omitido para produção em favor de config.active_support.report_deprecations
.
3.13.13 config.active_support.disallowed_deprecation
Configura o comportamento das mensagens de depreciação não permitidas. As opções são :raise
, :stderr
, :log
, :notify
e :silence
.
Nos arquivos config/environments
gerados por padrão, isso é definido como :raise
tanto para desenvolvimento quanto para teste, e é omitido para produção em favor de config.active_support.report_deprecations
.
3.13.14 config.active_support.disallowed_deprecation_warnings
Configura as mensagens de depreciação que a aplicação considera não permitidas. Isso permite, por exemplo, que depreciações específicas sejam tratadas como falhas graves.
3.13.15 config.active_support.report_deprecations
Quando false
, desativa todas as mensagens de depreciação, incluindo as depreciações não permitidas, dos deprecators da aplicação. Isso inclui todas as depreciações do Rails e de outras gems que podem adicionar seu deprecator à coleção de deprecators, mas pode não impedir todas as mensagens de depreciação emitidas por ActiveSupport::Deprecation.
Nos arquivos config/environments
gerados por padrão, isso é definido como false
para produção.
3.13.16 config.active_support.isolation_level
Configura a localidade da maioria do estado interno do Rails. Se você usar um servidor ou processador de tarefas baseado em fibers (por exemplo, falcon
), você deve definir como :fiber
. Caso contrário, é melhor usar a localidade :thread
. O valor padrão é :thread
.
3.13.17 config.active_support.executor_around_test_case
Configura o conjunto de testes para chamar Rails.application.executor.wrap
ao redor dos casos de teste. Isso faz com que os casos de teste se comportem mais próximos de uma solicitação ou tarefa real. Várias funcionalidades que normalmente são desabilitadas nos testes, como o cache de consultas do Active Record e consultas assíncronas, serão habilitadas.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.0 | true |
3.13.18 ActiveSupport::Logger.silencer
É definido como false
para desabilitar a capacidade de silenciar o registro em um bloco. O valor padrão é true
.
3.13.19 ActiveSupport::Cache::Store.logger
Especifica o logger a ser usado nas operações de cache store.
3.13.20 ActiveSupport.to_time_preserves_timezone
Especifica se os métodos to_time
preservam o deslocamento UTC de seus receptores. Se false
, os métodos to_time
converterão para o deslocamento UTC do sistema local.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
5.0 | true |
3.13.21 ActiveSupport.utc_to_local_returns_utc_offset_times
Configura ActiveSupport::TimeZone.utc_to_local
para retornar um horário com um deslocamento UTC em vez de um horário UTC incorporando esse deslocamento.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
6.1 | true |
3.13.22 config.active_support.raise_on_invalid_cache_expiration_time
Especifica se um ArgumentError
deve ser lançado se Rails.cache
fetch
ou write
receberem um tempo de expires_at
ou expires_in
inválido.
As opções são true
e false
. Se for false
, a exceção será relatada como tratada
e registrada.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.14 Configurando o Active Job
config.active_job
fornece as seguintes opções de configuração:
3.14.1 config.active_job.queue_adapter
Define o adaptador para o backend de fila. O adaptador padrão é :async
. Para obter uma lista atualizada de adaptadores integrados, consulte a documentação da API ActiveJob::QueueAdapters.
# Certifique-se de ter o gem do adaptador em seu Gemfile
# e siga as instruções específicas de instalação
# e implantação do adaptador.
config.active_job.queue_adapter = :sidekiq
3.14.2 config.active_job.default_queue_name
Pode ser usado para alterar o nome da fila padrão. Por padrão, é "default"
.
config.active_job.default_queue_name = :medium_priority
3.14.3 config.active_job.queue_name_prefix
Permite definir um prefixo de nome de fila opcional e não vazio para todos os jobs. Por padrão, está vazio e não é usado.
A seguinte configuração colocaria o job fornecido na fila production_high_priority
quando executado em produção:
config.active_job.queue_name_prefix = Rails.env
class GuestsCleanupJob < ActiveJob::Base
queue_as :high_priority
#....
end
3.14.4 config.active_job.queue_name_delimiter
Tem um valor padrão de '_'
. Se queue_name_prefix
for definido, então queue_name_delimiter
junta o prefixo e o nome da fila sem prefixo.
A seguinte configuração colocaria o job fornecido na fila video_server.low_priority
:
# o prefixo deve ser definido para que o delimitador seja usado
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
queue_as :low_priority
#....
end
3.14.5 config.active_job.logger
Aceita um logger que segue a interface do Log4r ou a classe padrão de logger do Ruby, que é então usado para registrar informações do Active Job. Você pode obter esse logger chamando logger
em uma classe Active Job ou em uma instância Active Job. Defina como nil
para desativar o registro.
3.14.6 config.active_job.custom_serializers
Permite definir serializadores de argumento personalizados. O valor padrão é []
.
3.14.7 config.active_job.log_arguments
Controla se os argumentos de um job são registrados. O valor padrão é true
.
3.14.8 config.active_job.verbose_enqueue_logs
Especifica se as localizações de origem dos métodos que enfileiram jobs em segundo plano devem ser registradas abaixo das linhas de registro relevantes. Por padrão, a flag é true
no ambiente de desenvolvimento e false
em todos os outros ambientes.
3.14.9 config.active_job.retry_jitter
Controla a quantidade de "jitter" (variação aleatória) aplicada ao tempo de atraso calculado ao reexecutar jobs falhados.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | 0.0 |
6.1 | 0.15 |
3.14.10 config.active_job.log_query_tags_around_perform
Determina se o contexto do job para tags de consulta será atualizado automaticamente via um around_perform
. O valor padrão é true
.
3.14.11 config.active_job.use_big_decimal_serializer
Ativa o novo serializador de argumento BigDecimal
, que garante a preservação dos dados. Sem esse serializador, alguns adaptadores de fila podem serializar argumentos BigDecimal
como strings simples (não preserváveis).
AVISO: Ao implantar um aplicativo com várias réplicas, réplicas antigas (anteriores ao Rails 7.1) não poderão desserializar argumentos BigDecimal
deste serializador. Portanto, essa configuração só deve ser ativada após todas as réplicas terem sido atualizadas com sucesso para o Rails 7.1.
O valor padrão depende da versão alvo config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.1 | true |
3.15 Configurando o Action Cable
3.15.1 config.action_cable.url
Aceita uma string para a URL onde você está hospedando seu servidor Action Cable. Você usaria essa opção se estiver executando servidores Action Cable separados de sua aplicação principal.
3.15.2 config.action_cable.mount_path
Aceita uma string para onde montar o Action Cable, como parte do processo do servidor principal. O padrão é /cable
. Você pode definir isso como nulo para não montar o Action Cable como parte do seu servidor Rails normal.
Você pode encontrar mais opções de configuração detalhadas na Visão geral do Action Cable.
3.15.3 config.action_cable.precompile_assets
Determina se os ativos do Action Cable devem ser adicionados à pré-compilação do pipeline de ativos. Isso não tem efeito se o Sprockets não for usado. O valor padrão é true
.
3.16 Configurando o Active Storage
config.active_storage
fornece as seguintes opções de configuração:
3.16.1 config.active_storage.variant_processor
Aceita um símbolo :mini_magick
ou :vips
, especificando se as transformações de variantes e análises de blob serão realizadas com o MiniMagick ou o ruby-vips.
O valor padrão depende da versão alvo config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | :mini_magick |
7.0 | :vips |
3.16.2 config.active_storage.analyzers
Aceita uma matriz de classes indicando os analisadores disponíveis para os blobs do Active Storage. Por padrão, isso é definido como:
config.active_storage.analyzers = [ActiveStorage::Analyzer::ImageAnalyzer::Vips, ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick, ActiveStorage::Analyzer::VideoAnalyzer, ActiveStorage::Analyzer::AudioAnalyzer]
Os analisadores de imagem podem extrair largura e altura de um blob de imagem; o analisador de vídeo pode extrair largura, altura, duração, ângulo, proporção de aspecto e presença/ausência de canais de vídeo/áudio de um blob de vídeo; o analisador de áudio pode extrair duração e taxa de bits de um blob de áudio.
3.16.3 config.active_storage.previewers
Aceita uma matriz de classes indicando os visualizadores de imagem disponíveis nos blobs do Active Storage. Por padrão, isso é definido como:
config.active_storage.previewers = [ActiveStorage::Previewer::PopplerPDFPreviewer, ActiveStorage::Previewer::MuPDFPreviewer, ActiveStorage::Previewer::VideoPreviewer]
PopplerPDFPreviewer
e MuPDFPreviewer
podem gerar uma miniatura da primeira página de um blob PDF; VideoPreviewer
do quadro relevante de um blob de vídeo.
3.16.4 config.active_storage.paths
Aceita um hash de opções indicando os locais dos comandos do visualizador/analisador. O padrão é {}
, o que significa que os comandos serão procurados no caminho padrão. Pode incluir qualquer uma dessas opções:
:ffprobe
- O local do executável ffprobe.:mutool
- O local do executável mutool.:ffmpeg
- O local do executável ffmpeg.
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'
3.16.5 config.active_storage.variable_content_types
Aceita uma matriz de strings indicando os tipos de conteúdo que o Active Storage pode transformar por meio do processador de variantes. Por padrão, isso é definido como:
config.active_storage.variable_content_types = %w(image/png image/gif image/jpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon image/webp image/avif image/heic image/heif)
3.16.6 config.active_storage.web_image_content_types
Aceita uma matriz de strings consideradas como tipos de conteúdo de imagem da web nos quais as variantes podem ser processadas sem serem convertidas para o formato PNG de fallback. Se você quiser usar variantes WebP
ou AVIF
em sua aplicação, pode adicionar image/webp
ou image/avif
a esta matriz. Por padrão, isso é definido como:
ruby
config.active_storage.web_image_content_types = %w(image/png image/jpeg image/gif)
3.16.7 config.active_storage.content_types_to_serve_as_binary
Aceita um array de strings indicando os tipos de conteúdo que o Active Storage sempre servirá como um anexo, em vez de inline. Por padrão, isso é definido como:
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)
3.16.8 config.active_storage.content_types_allowed_inline
Aceita um array de strings indicando os tipos de conteúdo que o Active Storage permite servir como inline. Por padrão, isso é definido como:
config.active_storage.content_types_allowed_inline` = %w(image/png image/gif image/jpeg image/tiff image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)
3.16.9 config.active_storage.queues.analysis
Aceita um símbolo indicando a fila do Active Job a ser usada para jobs de análise. Quando essa opção é nil
, os jobs de análise são enviados para a fila padrão do Active Job (veja config.active_job.default_queue_name
).
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
6.0 | :active_storage_analysis |
6.1 | nil |
3.16.10 config.active_storage.queues.purge
Aceita um símbolo indicando a fila do Active Job a ser usada para jobs de purga. Quando essa opção é nil
, os jobs de purga são enviados para a fila padrão do Active Job (veja config.active_job.default_queue_name
).
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
6.0 | :active_storage_purge |
6.1 | nil |
3.16.11 config.active_storage.queues.mirror
Aceita um símbolo indicando a fila do Active Job a ser usada para jobs de espelhamento de upload direto. Quando essa opção é nil
, os jobs de espelhamento são enviados para a fila padrão do Active Job (veja config.active_job.default_queue_name
). O padrão é nil
.
3.16.12 config.active_storage.logger
Pode ser usado para definir o logger usado pelo Active Storage. Aceita um logger que segue a interface do Log4r ou a classe padrão Ruby Logger.
config.active_storage.logger = ActiveSupport::Logger.new(STDOUT)
3.16.13 config.active_storage.service_urls_expire_in
Determina a expiração padrão das URLs geradas por:
ActiveStorage::Blob#url
ActiveStorage::Blob#service_url_for_direct_upload
ActiveStorage::Variant#url
O padrão é de 5 minutos.
3.16.14 config.active_storage.urls_expire_in
Determina a expiração padrão das URLs na aplicação Rails geradas pelo Active Storage. O padrão é nil
.
3.16.15 config.active_storage.routes_prefix
Pode ser usado para definir o prefixo de rota para as rotas servidas pelo Active Storage. Aceita uma string que será adicionada ao início das rotas geradas.
config.active_storage.routes_prefix = '/files'
O padrão é /rails/active_storage
.
3.16.16 config.active_storage.track_variants
Determina se as variantes são registradas no banco de dados.
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
6.1 | true |
3.16.17 config.active_storage.draw_routes
Pode ser usado para ativar ou desativar a geração de rotas do Active Storage. O padrão é true
.
3.16.18 config.active_storage.resolve_model_to_route
Pode ser usado para alterar globalmente como os arquivos do Active Storage são entregues.
Os valores permitidos são:
:rails_storage_redirect
: Redireciona para URLs de serviço assinadas e de curta duração.:rails_storage_proxy
: Proxy de arquivos fazendo download deles.
O padrão é :rails_storage_redirect
.
3.16.19 config.active_storage.video_preview_arguments
Pode ser usado para alterar a forma como o ffmpeg gera imagens de pré-visualização de vídeo.
O valor padrão depende da versão alvo de config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | "-y -vframes 1 -f image2" |
7.0 | "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015)" 1 + ",loop=loop=-1:size=2,trim=start_frame=1'" 2+ " -frames:v 1 -f image2"
|
3.16.20 config.active_storage.multiple_file_field_include_hidden
No Rails 7.1 em diante, os relacionamentos has_many_attached
do Active Storage serão substituídos pela coleção atual em vez de serem adicionados a ela. Assim, para suportar o envio de uma coleção vazia, quando multiple_file_field_include_hidden
for true
, o helper file_field
renderizará um campo oculto auxiliar, semelhante ao campo auxiliar renderizado pelo helper check_box
.
O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é |
---|---|
(original) | false |
7.0 | true |
3.16.21 config.active_storage.precompile_assets
Determina se os assets do Active Storage devem ser adicionados à pré-compilação do pipeline de assets. Isso não tem efeito se o Sprockets não for usado. O valor padrão é true
.
3.17 Configurando o Action Text
3.17.1 config.action_text.attachment_tag_name
Aceita uma string para a tag HTML usada para envolver os anexos. O valor padrão é "action-text-attachment"
.
3.17.2 config.action_text.sanitizer_vendor
Configura o sanitizador HTML usado pelo Action Text definindo ActionText::ContentHelper.sanitizer
como uma instância da classe retornada pelo método .safe_list_sanitizer
do fornecedor. O valor padrão depende da versão de destino config.load_defaults
:
A partir da versão | O valor padrão é | Que analisa a marcação como |
---|---|---|
(original) | Rails::HTML4::Sanitizer |
HTML4 |
7.1 | Rails::HTML5::Sanitizer (ver NOTA) |
HTML5 |
NOTA: Rails::HTML5::Sanitizer
não é suportado no JRuby, então em plataformas JRuby o Rails usará Rails::HTML4::Sanitizer
.
3.18 Configurando um Banco de Dados
Praticamente toda aplicação Rails irá interagir com um banco de dados. Você pode se conectar ao banco de dados definindo uma variável de ambiente ENV['DATABASE_URL']
ou usando um arquivo de configuração chamado config/database.yml
.
Usando o arquivo config/database.yml
, você pode especificar todas as informações necessárias para acessar o seu banco de dados:
development:
adapter: postgresql
database: blog_development
pool: 5
Isso irá se conectar ao banco de dados chamado blog_development
usando o adaptador postgresql
. Essas mesmas informações podem ser armazenadas em uma URL e fornecidas por meio de uma variável de ambiente, como:
ENV['DATABASE_URL'] # => "postgresql://localhost/blog_development?pool=5"
O arquivo config/database.yml
contém seções para três ambientes diferentes nos quais o Rails pode ser executado por padrão:
- O ambiente
development
é usado em seu computador de desenvolvimento/local, enquanto você interage manualmente com a aplicação. - O ambiente
test
é usado ao executar testes automatizados. - O ambiente
production
é usado ao implantar a aplicação para o mundo usar.
Se desejar, você pode especificar manualmente uma URL dentro do seu config/database.yml
development:
url: postgresql://localhost/blog_development?pool=5
O arquivo config/database.yml
pode conter tags ERB <%= %>
. Qualquer coisa dentro das tags será avaliada como código Ruby. Você pode usar isso para extrair dados de uma variável de ambiente ou para realizar cálculos para gerar as informações de conexão necessárias.
DICA: Você não precisa atualizar as configurações do banco de dados manualmente. Se você olhar as opções do gerador de aplicativos, verá que uma das opções é chamada --database
. Essa opção permite que você escolha um adaptador de uma lista dos bancos de dados relacionais mais usados. Você pode até executar o gerador repetidamente: cd .. && rails new blog --database=mysql
. Quando você confirmar a substituição do arquivo config/database.yml
, sua aplicação será configurada para o MySQL em vez do SQLite. Exemplos detalhados das conexões comuns de banco de dados estão abaixo.
3.19 Preferência de Conexão
Como existem duas maneiras de configurar sua conexão (usando config/database.yml
ou usando uma variável de ambiente), é importante entender como elas podem interagir.
Se você tiver um arquivo config/database.yml
vazio, mas sua ENV['DATABASE_URL']
estiver presente, o Rails se conectará ao banco de dados por meio da sua variável de ambiente:
$ cat config/database.yml
$ echo $DATABASE_URL
postgresql://localhost/my_database
Se você tiver um config/database.yml
, mas não tiver ENV['DATABASE_URL']
, então esse arquivo será usado para se conectar ao seu banco de dados:
$ cat config/database.yml
development:
adapter: postgresql
database: my_database
host: localhost
$ echo $DATABASE_URL
Se você tiver tanto config/database.yml
quanto ENV['DATABASE_URL']
definidos, o Rails mesclará as configurações. Para entender melhor isso, devemos ver alguns exemplos.
Quando informações de conexão duplicadas são fornecidas, a variável de ambiente tem prioridade:
$ 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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ 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">
]
Aqui, o adaptador, host e banco de dados correspondem às informações em ENV['DATABASE_URL']
.
Se informações não duplicadas forem fornecidas, você obterá todos os valores exclusivos, sendo que a variável de ambiente ainda tem prioridade em caso de conflitos.
$ cat config/database.yml
development:
adapter: sqlite3
pool: 5
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ 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">
]
Como o pool não está presente nas informações de conexão fornecidas em ENV['DATABASE_URL']
, suas informações são mescladas. Como o adaptador é duplicado, as informações de conexão em ENV['DATABASE_URL']
prevalecem.
A única maneira de explicitamente não usar as informações de conexão em ENV['DATABASE_URL']
é especificar uma conexão URL explícita usando a subchave "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'
#<ActiveRecord::DatabaseConfigurations:0x00007fd50e209a28>
$ 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">
]
Aqui, as informações de conexão em ENV['DATABASE_URL']
são ignoradas, observe o adaptador e o nome do banco de dados diferentes.
Como é possível incorporar ERB em seu config/database.yml
, é uma boa prática mostrar explicitamente que você está usando ENV['DATABASE_URL']
para se conectar ao seu banco de dados. Isso é especialmente útil em produção, pois você não deve incluir segredos, como a senha do banco de dados, no controle de versão (como o Git).
$ cat config/database.yml
production:
url: <%= ENV['DATABASE_URL'] %>
Agora o comportamento está claro, estamos usando apenas as informações de conexão em ENV['DATABASE_URL']
.
3.19.1 Configurando um Banco de Dados SQLite3
O Rails vem com suporte integrado ao SQLite3, que é um aplicativo de banco de dados leve e sem servidor. Embora um ambiente de produção movimentado possa sobrecarregar o SQLite, ele funciona bem para desenvolvimento e testes. O Rails usa um banco de dados SQLite como padrão ao criar um novo projeto, mas você sempre pode alterá-lo posteriormente.
Aqui está a seção do arquivo de configuração padrão (config/database.yml
) com informações de conexão para o ambiente de desenvolvimento:
development:
adapter: sqlite3
database: storage/development.sqlite3
pool: 5
timeout: 5000
NOTA: O Rails usa um banco de dados SQLite3 para armazenamento de dados por padrão porque é um banco de dados de configuração zero que funciona perfeitamente. O Rails também oferece suporte ao MySQL (incluindo o MariaDB) e ao PostgreSQL "pronto para uso" e possui plugins para muitos sistemas de banco de dados. Se você estiver usando um banco de dados em um ambiente de produção, é muito provável que o Rails tenha um adaptador para ele.
3.19.2 Configurando um Banco de Dados MySQL ou MariaDB
Se você optar por usar o MySQL ou MariaDB em vez do banco de dados SQLite3 fornecido, seu config/database.yml
ficará um pouco diferente. Aqui está a seção de desenvolvimento:
development:
adapter: mysql2
encoding: utf8mb4
database: blog_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
Se o seu banco de dados de desenvolvimento tiver um usuário root com uma senha vazia, essa configuração deve funcionar para você. Caso contrário, altere o nome de usuário e a senha na seção development
conforme apropriado.
NOTA: Se a sua versão do MySQL for 5.5 ou 5.6 e você desejar usar o conjunto de caracteres utf8mb4
por padrão, configure o seu servidor MySQL para suportar o prefixo de chave mais longo, ativando a variável de sistema innodb_large_prefix
.
As travas de assessoria estão habilitadas por padrão no MySQL e são usadas para tornar as migrações de banco de dados seguras em paralelo. Você pode desabilitar as travas de assessoria definindo advisory_locks
como false
:
production:
adapter: mysql2
advisory_locks: false
3.19.3 Configurando um Banco de Dados PostgreSQL
Se você optar por usar o PostgreSQL, seu config/database.yml
será personalizado para usar bancos de dados PostgreSQL:
development:
adapter: postgresql
encoding: unicode
database: blog_development
pool: 5
Por padrão, o Active Record usa recursos do banco de dados, como declarações preparadas e travas de assessoria. Você pode precisar desabilitar esses recursos se estiver usando um pool de conexões externo, como o PgBouncer:
production:
adapter: postgresql
prepared_statements: false
advisory_locks: false
Se ativado, o Active Record criará até 1000
declarações preparadas por conexão de banco de dados por padrão. Para modificar esse comportamento, você pode definir statement_limit
para um valor diferente:
production:
adapter: postgresql
statement_limit: 200
Quanto mais declarações preparadas em uso, mais memória seu banco de dados exigirá. Se o seu banco de dados PostgreSQL estiver atingindo limites de memória, tente reduzir statement_limit
ou desabilitar as declarações preparadas.
3.19.4 Configurando um Banco de Dados SQLite3 para a Plataforma JRuby
Se você optar por usar o SQLite3 e estiver usando o JRuby, seu config/database.yml
ficará um pouco diferente. Aqui está a seção de desenvolvimento:
development:
adapter: jdbcsqlite3
database: storage/development.sqlite3
3.19.5 Configurando um Banco de Dados MySQL ou MariaDB para a Plataforma JRuby
Se você optar por usar o MySQL ou MariaDB e estiver usando o JRuby, seu config/database.yml
ficará um pouco diferente. Aqui está a seção de desenvolvimento:
development:
adapter: jdbcmysql
database: blog_development
username: root
password:
3.19.6 Configurando um Banco de Dados PostgreSQL para a Plataforma JRuby
Se você optar por usar o PostgreSQL e estiver usando o JRuby, seu config/database.yml
ficará um pouco diferente. Aqui está a seção de desenvolvimento:
development:
adapter: jdbcpostgresql
encoding: unicode
database: blog_development
username: blog
password:
Altere o nome de usuário e a senha na seção development
conforme apropriado.
3.19.7 Configurando o Armazenamento de Metadados
Por padrão, o Rails armazenará informações sobre o ambiente do Rails e o esquema em uma tabela interna chamada ar_internal_metadata
.
Para desativar isso por conexão, defina use_metadata_table
em sua configuração de banco de dados. Isso é útil ao trabalhar com um banco de dados compartilhado e/ou usuário de banco de dados que não pode criar tabelas.
development:
adapter: postgresql
use_metadata_table: false
3.19.8 Configurando o Comportamento de Retentativa
Por padrão, o Rails reconectará automaticamente ao servidor do banco de dados e tentará novamente determinadas consultas se algo der errado. Somente consultas seguramente retentáveis (idempotentes) serão refeitas. O número de retentativas pode ser especificado na configuração do banco de dados por meio de connection_retries
, ou desativado definindo o valor como 0. O número padrão de retentativas é 1.
yaml
development:
adapter: mysql2
connection_retries: 3
A configuração do banco de dados também permite configurar um retry_deadline
. Se um retry_deadline
for configurado,
uma consulta que seria retratável não será refeita se o tempo especificado tiver passado desde a primeira tentativa da consulta.
Por exemplo, um retry_deadline
de 5 segundos significa que se 5 segundos se passaram desde a primeira tentativa de uma consulta,
a consulta não será refeita, mesmo que seja idempotente e ainda haja connection_retries
restantes.
O valor padrão para essa configuração é nulo, o que significa que todas as consultas retratáveis são refeitas independentemente do tempo decorrido. O valor para essa configuração deve ser especificado em segundos.
development:
adapter: mysql2
retry_deadline: 5 # Parar de refazer consultas após 5 segundos
3.19.9 Configurando o Cache de Consultas
Por padrão, o Rails armazena em cache automaticamente os conjuntos de resultados retornados pelas consultas. Se o Rails encontrar a mesma consulta novamente para a mesma solicitação ou tarefa, ele usará o conjunto de resultados em cache em vez de executar a consulta novamente no banco de dados.
O cache de consultas é armazenado na memória e, para evitar o uso excessivo de memória, ele remove automaticamente as consultas menos recentemente
usadas ao atingir um limite. Por padrão, o limite é 100
, mas pode ser configurado no database.yml
.
development:
adapter: mysql2
query_cache: 200
Para desativar completamente o cache de consultas, ele pode ser definido como false
development:
adapter: mysql2
query_cache: false
3.20 Criando Ambientes no Rails
Por padrão, o Rails vem com três ambientes: "development", "test" e "production". Embora esses sejam suficientes para a maioria dos casos de uso, há circunstâncias em que você deseja ter mais ambientes.
Imagine que você tenha um servidor que espelha o ambiente de produção, mas é usado apenas para testes. Esse servidor é comumente chamado de "servidor de staging". Para definir um ambiente chamado "staging" para esse servidor, basta criar um arquivo chamado config/environments/staging.rb
. Como esse é um ambiente semelhante ao de produção, você pode copiar o conteúdo de config/environments/production.rb
como ponto de partida e fazer as alterações necessárias a partir daí. Também é possível requerer e estender outras configurações de ambiente dessa maneira:
# config/environments/staging.rb
require_relative "production"
Rails.application.configure do
# Sobrescritas de staging
end
Esse ambiente não é diferente dos ambientes padrão, inicie um servidor com bin/rails server -e staging
, um console com bin/rails console -e staging
, Rails.env.staging?
funciona, etc.
3.21 Implantação em um Subdiretório (root URL relativo)
Por padrão, o Rails espera que sua aplicação esteja sendo executada na raiz
(por exemplo, /
). Esta seção explica como executar sua aplicação dentro de um diretório.
Vamos supor que queremos implantar nossa aplicação em "/app1". O Rails precisa saber esse diretório para gerar as rotas apropriadas:
config.relative_url_root = "/app1"
alternativamente, você pode definir a variável de ambiente RAILS_RELATIVE_URL_ROOT
.
Agora o Rails irá adicionar "/app1" ao gerar links.
3.21.1 Usando o Passenger
O Passenger facilita a execução de sua aplicação em um subdiretório. Você pode encontrar a configuração relevante no manual do Passenger.
3.21.2 Usando um Proxy Reverso
Implantar sua aplicação usando um proxy reverso tem vantagens definitivas em relação às implantações tradicionais. Eles permitem que você tenha mais controle sobre seu servidor, sobrepondo os componentes necessários para sua aplicação. Muitos servidores web modernos podem ser usados como um servidor proxy para balancear elementos de terceiros, como servidores de cache ou servidores de aplicativos.
Um servidor de aplicativos que você pode usar é o Unicorn para rodar atrás de um proxy reverso.
Nesse caso, você precisaria configurar o servidor proxy (NGINX, Apache, etc) para aceitar conexões do seu servidor de aplicativos (Unicorn). Por padrão, o Unicorn irá ouvir conexões TCP na porta 8080, mas você pode alterar a porta ou configurá-lo para usar sockets.
Você pode encontrar mais informações no readme do Unicorn e entender a filosofia por trás dele.
Depois de configurar o servidor de aplicativos, você deve redirecionar as solicitações para ele configurando corretamente o seu servidor web. Por exemplo, a configuração do NGINX pode incluir:
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;
}
# alguma outra configuração
}
Certifique-se de ler a documentação do NGINX para obter as informações mais atualizadas.
4 Configurações do Ambiente Rails
Algumas partes do Rails também podem ser configuradas externamente fornecendo variáveis de ambiente. As seguintes variáveis de ambiente são reconhecidas por várias partes do Rails:
ENV["RAILS_ENV"]
define o ambiente Rails (produção, desenvolvimento, teste, etc.) no qual o Rails será executado.ENV["RAILS_RELATIVE_URL_ROOT"]
é usado pelo código de roteamento para reconhecer URLs quando você implanta sua aplicação em um subdiretório.ENV["RAILS_CACHE_ID"]
eENV["RAILS_APP_VERSION"]
são usados para gerar chaves de cache expandidas no código de cache do Rails. Isso permite que você tenha vários caches separados da mesma aplicação.
5 Usando Arquivos de Inicialização
Após carregar o framework e quaisquer gems em sua aplicação, o Rails passa a carregar os inicializadores. Um inicializador é qualquer arquivo Ruby armazenado em config/initializers
em sua aplicação. Você pode usar inicializadores para armazenar configurações que devem ser feitas após o carregamento de todos os frameworks e gems, como opções para configurar essas partes.
Os arquivos em config/initializers
(e quaisquer subdiretórios de config/initializers
) são ordenados e carregados um por um como parte do inicializador load_config_initializers
.
Se um inicializador tiver código que dependa de código em outro inicializador, você pode combiná-los em um único inicializador. Isso torna as dependências mais explícitas e pode ajudar a destacar novos conceitos dentro da sua aplicação. O Rails também suporta a numeração dos nomes dos arquivos de inicialização, mas isso pode levar a uma grande quantidade de alterações nos nomes dos arquivos. Carregar explicitamente inicializadores com require
não é recomendado, pois isso fará com que o inicializador seja carregado duas vezes.
NOTA: Não há garantia de que seus inicializadores serão executados após todos os inicializadores de gems, portanto, qualquer código de inicialização que dependa de uma determinada gem ter sido inicializada deve ser colocado em um bloco config.after_initialize
.
6 Eventos de Inicialização
O Rails possui 5 eventos de inicialização nos quais você pode se conectar (listados na ordem em que são executados):
before_configuration
: Isso é executado assim que a constante de aplicação herda deRails::Application
. As chamadasconfig
são avaliadas antes disso acontecer.before_initialize
: Isso é executado imediatamente antes do processo de inicialização da aplicação ocorrer com o inicializador:bootstrap_hook
perto do início do processo de inicialização do Rails.to_prepare
: Executa após a execução dos inicializadores de todas as Railties (incluindo a própria aplicação), mas antes do carregamento antecipado e da construção da pilha de middlewares. Mais importante, será executado a cada recarregamento de código emdevelopment
, mas apenas uma vez (durante a inicialização) emproduction
etest
.before_eager_load
: Isso é executado diretamente antes do carregamento antecipado ocorrer, que é o comportamento padrão para o ambienteproduction
e não para o ambientedevelopment
.after_initialize
: Executa diretamente após a inicialização da aplicação, após a execução dos inicializadores da aplicação emconfig/initializers
.
Para definir um evento para esses hooks, use a sintaxe de bloco dentro de uma subclasse Rails::Application
, Rails::Railtie
ou Rails::Engine
:
module YourApp
class Application < Rails::Application
config.before_initialize do
# código de inicialização vai aqui
end
end
end
Alternativamente, você também pode fazer isso através do método config
no objeto Rails.application
:
Rails.application.config.before_initialize do
# código de inicialização vai aqui
end
AVISO: Algumas partes da sua aplicação, especialmente o roteamento, ainda não estão configuradas no ponto em que o bloco after_initialize
é chamado.
6.1 Rails::Railtie#initializer
O Rails possui vários inicializadores que são executados no início e são todos definidos usando o método initializer
de Rails::Railtie
. Aqui está um exemplo do inicializador set_helpers_path
do Action Controller:
initializer "action_controller.set_helpers_path" do |app|
ActionController::Helpers.helpers_path = app.helpers_paths
end
O método initializer
recebe três argumentos, sendo o primeiro o nome do inicializador, o segundo um hash de opções (não mostrado aqui) e o terceiro um bloco. A chave :before
no hash de opções pode ser especificada para especificar qual inicializador este novo inicializador deve ser executado antes, e a chave :after
especificará qual inicializador executar este inicializador depois.
Inicializadores definidos usando o método initializer
serão executados na ordem em que são definidos, com exceção daqueles que usam os métodos :before
ou :after
.
AVISO: Você pode colocar seu inicializador antes ou depois de qualquer outro inicializador na cadeia, desde que seja lógico. Digamos que você tenha 4 inicializadores chamados "one" a "four" (definidos nessa ordem) e você define "four" para ir antes de "two" mas depois de "three", isso simplesmente não é lógico e o Rails não será capaz de determinar a ordem dos inicializadores.
O argumento de bloco do método initializer
é a instância da própria aplicação, e assim podemos acessar a configuração usando o método config
como feito no exemplo.
Como Rails::Application
herda de Rails::Railtie
(indiretamente), você pode usar o método initializer
em config/application.rb
para definir inicializadores para a aplicação.
6.2 Inicializadores
Abaixo está uma lista abrangente de todos os inicializadores encontrados no Rails na ordem em que são definidos (e, portanto, executados, a menos que seja especificado de outra forma).
load_environment_hook
: Serve como um marcador para que:load_environment_config
possa ser definido para ser executado antes dele.load_active_support
: Requeractive_support/dependencies
, que configura a base para o Active Support. Opcionalmente, requeractive_support/all
seconfig.active_support.bare
não for verdadeiro, que é o padrão.initialize_logger
: Inicializa o logger (um objetoActiveSupport::Logger
) para a aplicação e o torna acessível emRails.logger
, desde que nenhum inicializador inserido antes desse ponto tenha definidoRails.logger
.initialize_cache
: SeRails.cache
ainda não estiver definido, inicializa o cache referenciando o valor emconfig.cache_store
e armazena o resultado comoRails.cache
. Se esse objeto responder ao métodomiddleware
, seu middleware é inserido antes deRack::Runtime
na pilha de middlewares.set_clear_dependencies_hook
: Este inicializador - que é executado apenas seconfig.enable_reloading
estiver definido comotrue
- usaActionDispatch::Callbacks.after
para remover as constantes que foram referenciadas durante a solicitação do espaço de objetos, para que sejam recarregadas durante a solicitação seguinte.bootstrap_hook
: Executa todos os blocos configurados embefore_initialize
.i18n.callbacks
: No ambiente de desenvolvimento, configura um retorno de chamadato_prepare
que chamaráI18n.reload!
se alguma das localidades tiverem sido alteradas desde a última solicitação. Na produção, esse retorno de chamada será executado apenas na primeira solicitação.active_support.deprecation_behavior
: Configura o comportamento de relatório de obsolescência paraRails.application.deprecators
com base emconfig.active_support.report_deprecations
,config.active_support.deprecation
,config.active_support.disallowed_deprecation
econfig.active_support.disallowed_deprecation_warnings
.active_support.initialize_time_zone
: Define o fuso horário padrão para a aplicação com base na configuraçãoconfig.time_zone
, que é "UTC" por padrão.active_support.initialize_beginning_of_week
: Define o início da semana padrão para a aplicação com base na configuraçãoconfig.beginning_of_week
, que é:monday
por padrão.active_support.set_configs
: Configura o Active Support usando as configurações emconfig.active_support
, enviando os nomes dos métodos como setters paraActiveSupport
e passando os valores.action_dispatch.configure
: ConfiguraActionDispatch::Http::URL.tld_length
para o valor deconfig.action_dispatch.tld_length
.action_view.set_configs
: Configura o Action View usando as configurações emconfig.action_view
, enviando os nomes dos métodos como setters paraActionView::Base
e passando os valores.action_controller.assets_config
: Inicializaconfig.action_controller.assets_dir
para o diretório público do aplicativo, se não estiver configurado explicitamente.action_controller.set_helpers_path
: Define ohelpers_path
do Action Controller para ohelpers_path
do aplicativo.action_controller.parameters_config
: Configura as opções de parâmetros fortes paraActionController::Parameters
.action_controller.set_configs
: Configura o Action Controller usando as configurações emconfig.action_controller
, enviando os nomes dos métodos como setters paraActionController::Base
e passando os valores.action_controller.compile_config_methods
: Inicializa os métodos para as configurações especificadas para que sejam mais rápidos de acessar.active_record.initialize_timezone
: DefineActiveRecord::Base.time_zone_aware_attributes
comotrue
e também defineActiveRecord::Base.default_timezone
como UTC. Quando os atributos são lidos do banco de dados, eles serão convertidos para o fuso horário especificado porTime.zone
.active_record.logger
: DefineActiveRecord::Base.logger
- se ainda não estiver definido - comoRails.logger
.active_record.migration_error
: Configura o middleware para verificar se há migrações pendentes.active_record.check_schema_cache_dump
: Carrega o cache de esquema se estiver configurado e disponível.active_record.warn_on_records_fetched_greater_than
: Ativa avisos quando as consultas retornam um grande número de registros.active_record.set_configs
: Configura o Active Record usando as configurações emconfig.active_record
, enviando os nomes dos métodos como setters paraActiveRecord::Base
e passando os valores.active_record.initialize_database
: Carrega a configuração do banco de dados (por padrão) deconfig/database.yml
e estabelece uma conexão para o ambiente atual.active_record.log_runtime
: IncluiActiveRecord::Railties::ControllerRuntime
eActiveRecord::Railties::JobRuntime
, que são responsáveis por relatar o tempo gasto pelas chamadas do Active Record para o logger.active_record.set_reloader_hooks
: Redefine todas as conexões recarregáveis para o banco de dados seconfig.enable_reloading
estiver definido comotrue
.active_record.add_watchable_files
: Adiciona os arquivosschema.rb
estructure.sql
aos arquivos a serem observados.active_job.logger
: DefineActiveJob::Base.logger
- se ainda não estiver definido - comoRails.logger
.active_job.set_configs
: Configura o Active Job usando as configurações emconfig.active_job
, enviando os nomes dos métodos como setters paraActiveJob::Base
e passando os valores através deles.action_mailer.logger
: DefineActionMailer::Base.logger
- se ainda não estiver definido - comoRails.logger
.action_mailer.set_configs
: Configura o Action Mailer usando as configurações emconfig.action_mailer
, enviando os nomes dos métodos como setters paraActionMailer::Base
e passando os valores através deles.action_mailer.compile_config_methods
: Inicializa os métodos para as configurações especificadas, para que sejam acessados mais rapidamente.set_load_path
: Este inicializador é executado antes debootstrap_hook
. Adiciona os caminhos especificados porconfig.load_paths
e todos os caminhos de carregamento automático em$LOAD_PATH
.set_autoload_paths
: Este inicializador é executado antes debootstrap_hook
. Adiciona todos os subdiretórios deapp
e os caminhos especificados porconfig.autoload_paths
,config.eager_load_paths
econfig.autoload_once_paths
emActiveSupport::Dependencies.autoload_paths
.add_routing_paths
: Carrega (por padrão) todos os arquivosconfig/routes.rb
(na aplicação e nas railties, incluindo engines) e configura as rotas para a aplicação.add_locales
: Adiciona os arquivos emconfig/locales
(da aplicação, railties e engines) emI18n.load_path
, tornando as traduções nesses arquivos disponíveis.add_view_paths
: Adiciona o diretórioapp/views
da aplicação, railties e engines ao caminho de busca para arquivos de visualização da aplicação.add_mailer_preview_paths
: Adiciona o diretóriotest/mailers/previews
da aplicação, railties e engines ao caminho de busca para arquivos de visualização de emails da aplicação.load_environment_config
: Este inicializador é executado antes deload_environment_hook
. Carrega o arquivoconfig/environments
para o ambiente atual.prepend_helpers_path
: Adiciona o diretórioapp/helpers
da aplicação, railties e engines ao caminho de busca para helpers da aplicação.load_config_initializers
: Carrega todos os arquivos Ruby deconfig/initializers
na aplicação, railties e engines. Os arquivos neste diretório podem ser usados para armazenar configurações que devem ser feitas após o carregamento de todos os frameworks.engines_blank_point
: Fornece um ponto de inicialização para se conectar se você deseja fazer algo antes que as engines sejam carregadas. Após este ponto, todos os inicializadores de railtie e engine são executados.add_generator_templates
: Localiza os modelos para geradores emlib/templates
para a aplicação, railties e engines, e adiciona-os à configuraçãoconfig.generators.templates
, que tornará os modelos disponíveis para todos os geradores referenciarem.ensure_autoload_once_paths_as_subset
: Garante queconfig.autoload_once_paths
contenha apenas os caminhos deconfig.autoload_paths
. Se contiver caminhos extras, uma exceção será lançada.add_to_prepare_blocks
: O bloco para cada chamadaconfig.to_prepare
na aplicação, railtie ou engine é adicionado aos callbacksto_prepare
para Action Dispatch, que serão executados por solicitação no desenvolvimento ou antes da primeira solicitação na produção.add_builtin_route
: Se a aplicação estiver sendo executada no ambiente de desenvolvimento, isso adicionará a rota pararails/info/properties
às rotas da aplicação. Essa rota fornece informações detalhadas, como a versão do Rails e do Ruby, parapublic/index.html
em uma aplicação Rails padrão.build_middleware_stack
: Constrói a pilha de middlewares para a aplicação, retornando um objeto que possui um métodocall
que recebe um objeto de ambiente Rack para a solicitação.eager_load!
: Seconfig.eager_load
fortrue
, executa os hooksconfig.before_eager_load
e, em seguida, chamaeager_load!
, que carregará todos osconfig.eager_load_namespaces
.finisher_hook
: Fornece um gancho para depois que o processo de inicialização da aplicação estiver completo, além de executar todos os blocosconfig.after_initialize
para a aplicação, railties e engines.set_routes_reloader_hook
: Configura o Action Dispatch para recarregar o arquivo de rotas usandoActiveSupport::Callbacks.to_run
.disable_dependency_loading
: Desativa o carregamento automático de dependências seconfig.eager_load
estiver definido comotrue
.
7 Pooling de Banco de Dados
As conexões de banco de dados do Active Record são gerenciadas por ActiveRecord::ConnectionAdapters::ConnectionPool
, que garante que um pool de conexões sincronize a quantidade de acesso de threads a um número limitado de conexões de banco de dados. Esse limite padrão é 5 e pode ser configurado em database.yml
.
development:
adapter: sqlite3
database: storage/development.sqlite3
pool: 5
timeout: 5000
Como o pooling de conexões é tratado dentro do Active Record por padrão, todos os servidores de aplicativos (Thin, Puma, Unicorn, etc.) devem se comportar da mesma maneira. O pool de conexões de banco de dados está inicialmente vazio. À medida que a demanda por conexões aumenta, ele as cria até atingir o limite do pool de conexões.
Qualquer solicitação verificará uma conexão na primeira vez que precisar acessar o banco de dados. No final da solicitação, ela verificará a conexão novamente. Isso significa que o slot de conexão adicional estará disponível novamente para a próxima solicitação na fila.
Se você tentar usar mais conexões do que as disponíveis, o Active Record bloqueará você e aguardará uma conexão do pool. Se não conseguir obter uma conexão, será lançado um erro de tempo limite semelhante ao mostrado abaixo.
ActiveRecord::ConnectionTimeoutError - não foi possível obter uma conexão de banco de dados em 5.000 segundos (esperou 5.000 segundos)
Se você receber o erro acima, talvez queira aumentar o tamanho do pool de conexões incrementando a opção pool
em database.yml
.
NOTA. Se você estiver executando em um ambiente com várias threads, pode haver a chance de várias threads acessarem várias conexões simultaneamente. Portanto, dependendo da carga atual da solicitação, você pode ter várias threads competindo por um número limitado de conexões.
8 Configuração Personalizada
Você pode configurar seu próprio código por meio do objeto de configuração do Rails com configuração personalizada no namespace config.x
ou diretamente em config
. A diferença fundamental entre esses dois é que você deve usar config.x
se estiver definindo uma configuração aninhada (por exemplo, config.x.nested.hi
), e apenas config
para configuração em um único nível (por exemplo, config.hello
).
config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries = 3
config.super_debugger = true
Esses pontos de configuração estão disponíveis por meio do objeto de configuração:
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
Você também pode usar Rails::Application.config_for
para carregar arquivos de configuração inteiros:
# 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 ou development_merchant_id
Rails::Application.config_for
suporta uma configuração shared
para agrupar configurações comuns. A configuração compartilhada será mesclada na configuração do ambiente.
# config/example.yml
shared:
foo:
bar:
baz: 1
development:
foo:
bar:
qux: 2
# ambiente de desenvolvimento
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }
9 Indexação de Mecanismos de Busca
Às vezes, você pode querer impedir que algumas páginas de sua aplicação sejam visíveis em sites de busca como Google, Bing, Yahoo ou Duck Duck Go. Os robôs que indexam esses sites primeiro analisarão o arquivo http://seu-site.com/robots.txt
para saber quais páginas eles têm permissão para indexar.
O Rails cria este arquivo para você dentro da pasta /public
. Por padrão, ele permite que os mecanismos de busca indexem todas as páginas da sua aplicação. Se você deseja bloquear a indexação em todas as páginas da sua aplicação, use o seguinte:
User-agent: *
Disallow: /
Para bloquear apenas páginas específicas, é necessário usar uma sintaxe mais complexa. Saiba mais na documentação oficial.
10 Monitor de Sistema de Arquivos com Eventos
Se a gem listen estiver carregada, o Rails usa um monitor de sistema de arquivos com eventos para detectar alterações quando a recarga está habilitada:
group :development do
gem 'listen', '~> 3.3'
end
Caso contrário, em cada solicitação, o Rails percorre a árvore da aplicação para verificar se algo foi alterado.
No Linux e macOS, não são necessárias gemas adicionais, mas algumas são necessárias para *BSD e para Windows.
Observe que algumas configurações não são suportadas.
Feedback
Você é incentivado a ajudar a melhorar a qualidade deste guia.
Por favor, contribua se encontrar algum erro de digitação ou factual. Para começar, você pode ler nossa contribuição à documentação seção.
Você também pode encontrar conteúdo incompleto ou desatualizado. Por favor, adicione qualquer documentação ausente para o principal. Certifique-se de verificar Guias Edge primeiro para verificar se os problemas já foram corrigidos ou não no branch principal. Verifique as Diretrizes dos Guias do Ruby on Rails para estilo e convenções.
Se por algum motivo você encontrar algo para corrigir, mas não puder corrigi-lo você mesmo, por favor abra uma issue.
E por último, mas não menos importante, qualquer tipo de discussão sobre a documentação do Ruby on Rails é muito bem-vinda no Fórum oficial do Ruby on Rails.