v7.0.0
更多資訊請前往 rubyonrails.org: 更多在 Ruby on Rails

設定 Rails 應用程式

本指南包含了 Rails 應用程式可用的設定和初始化功能。

閱讀本指南後,您將瞭解:

1 初始化程式碼的位置

Rails 提供了四個標準點來放置初始化程式碼:

  • config/application.rb
  • 特定於環境的設定檔案
  • 初始化程式
  • 後初始化器

2 在 Rails 之前執行程式碼

在極少數情況下,您的應用程式需要在載入 Rails 之前執行一些程式碼,請將其放在 config/application.rb 中對 require "rails/all" 的呼叫上方。

3 設定 Rails 元件

一般來說,設定Rails的工作就是設定Rails的元件,以及設定Rails本身。設定檔案 config/application.rb 和特定於環境的設定檔案(例如 config/environments/production.rb)允許您指定要傳遞給所有元件的各種設定。

例如,您可以將此設定新增到 config/application.rb 檔案中:

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

這是 Rails 本身的設定。如果您想將設定傳遞給單獨的 Rails 元件,您可以透過 config/application.rb 中的相同 config 物件來實現:

config.active_record.schema_format = :ruby

Rails 將使用該特定設定來設定 Active Record。

使用公共設定方法而不是直接呼叫關聯的類。例如Rails.application.config.action_mailer.options 而不是 ActionMailer::Base.options

如果您需要將設定直接應用於類,請在初始化程式中使用 延遲載入掛載機制 以避免在初始化完成之前自動載入類。這會中斷,因為在應用程式重新載入時無法安全地重複初始化期間的自動載入。

3.1 Rails 通用設定

以下設定方法將在 Rails::Railtie 物件上呼叫,例如 Rails::EngineRails::Application 的子類。

3.1.1 config.after_initialize

獲取將在after Rails 完成應用程式初始化後執行的塊。這包括框架本身、引擎和 config/initializers 中所有應用程式初始化程式的初始化。請注意,此塊為 rake 任務執行。用於設定由其他初始化程式設定的 values:

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

設定資產的主機。當 CDN 用於託管資產時,或者當您想要使用不同域別名解決瀏覽器中內建的平行計算限制時,這很有用。 config.action_controller.asset_host 的較短版本。

3.1.3 config.autoload_once_paths

接受一組路徑,Rails 將從這些路徑中自動載入不會按請求擦除的常量。如果 config.cache_classesfalse,則相關,這是開發環境中的預設值。否則,所有自動載入只發生一次。此陣列的所有元素也必須在 autoload_paths 中。預設為空陣列。

3.1.4 config.autoload_paths

接受 Rails 將自動載入常量的路徑陣列。預設為空陣列。由於 Rails 6,不建議調整此項。請參閱自動載入和重新載入常量

3.1.5 config.add_autoload_paths_to_load_path

表示是否必須將自動載入路徑新增到 $LOAD_PATH。該標誌預設為true,但建議在:zeitwerk模式早期設定為false,在config/application.rb。 Zeitwerk 內部使用絕對路徑,在 :zeitwerk 模式下執行的應用程式不需要 require_dependency,因此 models、controllers、作業等不需要在 $LOAD_PATH 中。將其設定為 false 可以避免 Ruby 在使用相對路徑解析 require 呼叫時檢查這些目錄,並節省 Bootsnap 工作和 RAM,因為它不需要為它們構建索引。

3.1.6 config.cache_classes

控制應用程式類和 modules 是否在更改時重新載入。開發環境預設為 false,生產環境預設為 true。在測試環境中,如果安裝了Spring,則預設為false,否則為true

3.1.7 config.beginning_of_week

設定預設的一週開始時間 應用。接受有效的星期幾作為 symbol(例如 :monday)。

3.1.8 config.cache_store

設定用於 Rails 快取的快取儲存。選項包括 symbols :memory_store:file_store:mem_cache_store:null_store:redis_cache_store 或實現快取 API 的物件之一。預設為 :file_store。有關每個儲存的設定選項,請參閱 快取儲存

3.1.9 config.colorize_logging

指定在記錄資訊時是否使用 ANSI 顏色程式碼。預設為 true

3.1.10 config.consider_all_requests_local

是一面旗幟。如果 true 那麼任何錯誤都會導致在 HTTP 回應中轉儲詳細的除錯資訊,並且 Rails::Info 控制器將在 /rails/info/properties 中顯示應用程式執行時上下文。開發和測試環境預設為 true,生產環境預設為 false。對於更細粒度的控制,將其設定為 false 並在 controllers 中實現 show_detailed_exceptions? 以指定哪些請求應提供有關錯誤的除錯資訊。

3.1.11 config.console

允許您設定在執行 bin/rails console 時將用作控制檯的類。最好在 console 塊中執行它:

console do
  # this block is called only when running console,
  # so we can safely require pry here
  require "pry"
  config.console = Pry
end
3.1.12 config.disable_sandbox

控制是否有人可以在沙箱模式下啟動控制檯。這有助於避免沙箱控制檯長時間執行 session,這可能導致資料庫伺服器記憶體不足。預設為假。

3.1.13 config.eager_load

true 時,eager 載入所有已註冊的 config.eager_load_namespaces。這包括您的應用程式、引擎、Rails 框架和任何其他註冊的名稱空間。

3.1.14 config.eager_load_namespaces

註冊在 config.eager_load 設定為 true 時預先載入的名稱空間。列表中的所有名稱空間都必須回應 eager_load! 方法。

3.1.15 config.eager_load_paths

如果 config.cache_classes 設定為 true,則接受 Rails 將在啟動時急切載入的路徑陣列。預設為應用程式的 app 目錄中的每個資料夾。

3.1.16 config.enable_dependency_loading

當為 true 時,啟用自動載入,即使應用程式是預先載入的並且 config.cache_classes 設定為 true。預設為假。

3.1.17 config.encoding

設定應用程式範圍的編碼。預設為 UTF-8。

3.1.18 config.exceptions_app

設定發生異常時由 ShowException 中介軟體呼叫的異常應用程式。預設為 ActionDispatch::PublicExceptions.new(Rails.public_path)

3.1.19 config.debug_exception_response_format

設定在開發環境中發生錯誤時回應中使用的格式。對於僅 API 的應用程式預設為 :api,對於普通應用程式預設為 :default

3.1.20 config.file_watcher

config.reload_classes_only_on_changetrue時用於檢測檔案系統中檔案更新的類。 Rails 隨附 ActiveSupport::FileUpdateChecker(預設值)和 ActiveSupport::EventedFileUpdateChecker(這取決於 listen gem)。自定義類必須符合 ActiveSupport::FileUpdateChecker API。

3.1.21 config.filter_parameters

用於過濾掉不想在日誌中顯示的引數,例如密碼或信用卡 數字。在 Active Record 物件上呼叫 #inspect 時,它還過濾掉敏感的 values 資料庫列。預設情況下,Rails 透過在 config/initializers/filter_parameter_logging.rb 中新增 Rails.application.config.filter_parameters += [:password] 來過濾密碼。引數過濾器透過部分匹配正則表示式工作。

3.1.22 config.force_ssl

強制所有請求都透過 HTTPS 提供服務,並在產生 URL 時將 "https://" 設定為預設協議。 HTTPS 的強制執行由 ActionDispatch::SSL 中介軟體處理,可以透過 config.ssl_options 進行設定 - 有關詳細資訊,請參閱其 文件

3.1.23 config.javascript_path

設定應用程式的 JavaScript 相對於 app 目錄的路徑。預設為 javascript,由 webpacker 使用。應用設定的 javascript_path 將從 autoload_paths 中排除。

3.1.24 config.log_formatter

定義 Rails 記錄器的格式化程式。此選項預設為所有環境的 ActiveSupport::Logger::SimpleFormatter 實例。如果您為 config.logger 設定 value,則必須在將格式化程式的 value 包裝在 ActiveSupport::TaggedLogging 實例中之前手動將其傳遞給記錄器,Rails 不會為您執行此操作。

3.1.25 config.log_level

定義 Rails 記錄器的詳細程度。對於除生產環境之外的所有環境,此選項預設為 :debug,生產環境預設為 :info。可用的日誌級別有::debug:info:warn:error:fatal:unknown

3.1.26 config.log_tags

接受 request 物件回應的方法列表、接受 request 物件的 Proc 或回應 to_s 的東西。這使得使用子域和請求 id 等除錯資訊標記日誌行變得容易——這兩者都非常有助於除錯多使用者生產應用程式。

3.1.27 config.logger

是將用於 Rails.logger 和任何相關 Rails 日誌記錄的記錄器,例如 ActiveRecord::Base.logger。它預設為一個 ActiveSupport::TaggedLogging 的實例,它包裝了一個 ActiveSupport::Logger 的實例,輸出一個日誌到 log/ 目錄。您可以提供自定義記錄器,要獲得完全相容性,您必須遵循以下準則:

  • 要支援格式化程式,您必須手動將 config.log_formatter value 中的格式化程式分配給記錄器。
  • 為了支援標記日誌,日誌實例必須用 ActiveSupport::TaggedLogging 包裹。
  • 為了支援靜音,記錄器必須包含 ActiveSupport::LoggerSilence 模組。 ActiveSupport::Logger 類已經包含這些 modules。
class MyLogger < ::Logger
  include ActiveSupport::LoggerSilence
end

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

允許您設定應用程式的中介軟體。下面的 設定中介軟體 部分對此進行了深入介紹。

3.1.29 config.rake_eager_load

true 時,在執行 Rake 任務時預先載入應用程式。預設為 false

3.1.30 config.reload_classes_only_on_change

僅在跟蹤檔案更改時啟用或禁用類的重新載入。預設情況下 tracks 自動載入路徑上的所有內容並設定為 true。如果 config.cache_classestrue,則忽略此選項。

3.1.31 config.credentials.content_path

設定加密憑據的查詢路徑。

3.1.32 config.credentials.key_path

為加密 key 設定查詢路徑。

3.1.33 secret_key_base`

用於指定 key,它允許針對已知安全 key 驗證應用程式的 sessions 以防止篡改。應用程式在測試和開發環境中隨機產生一個 key,其他環境應在 config/credentials.yml.enc 中設定一個。

3.1.34 config.require_master_key

如果主 key 尚未透過 ENV["RAILS_MASTER_KEY"]config/master.key 檔案可用,則導致應用程式無法啟動。

3.1.35 config.public_file_server.enabled

設定 Rails 以提供公共目錄中的靜態檔案。此選項預設為 true,但在生產環境中設定為 false,因為用於執行應用程式的伺服器軟體(例如 NGINX 或 Apache)應改為提供靜態檔案。如果您在生產環境中使用 WEBrick 執行或測試您的應用程式(不建議在生產環境中使用 WEBrick),請將選項設定為 true。否則,您將無法使用頁面快取和請求公共目錄下存在的檔案。

3.1.36 config.session_store

指定用於儲存會話的類。可能的 values 是預設的 :cookie_store:mem_cache_store:disabled。最後一個告訴Rails不要處理sessions。預設為 cookie 儲存,應用程式名稱為會話 key。還可以指定自定義會話儲存:

config.session_store :my_custom_store

此自定義儲存必須定義為 ActionDispatch::Session::MyCustomStore

3.1.37 config.time_zone

設定應用程式的預設時區併為 Active Record 啟用時區感知。

3.2 設定資產

3.2.1 config.assets.enabled

控制是否啟用 asset pipeline 的標誌。設定為 true 預設情況下。

3.2.2 config.assets.css_compressor

定義要使用的 CSS 壓縮器。預設情況下由 sass-rails 設定。目前唯一的替代 value 是 :yui,它使用 yui-compressor gem。

3.2.3 config.assets.js_compressor

定義要使用的 JavaScript 壓縮器。可能的 values 是 :terser:closure:uglifier:yui,它們分別需要使用 terserclosure-compileruglifieryui-compressor gem。

3.2.4 config.assets.gzip

允許建立編譯資產的 gzip 版本以及非 gzip 資產的標誌。預設設定為 true

3.2.5 config.assets.paths

包含用於查詢資產的路徑。將路徑附加到此設定選項將導致在搜尋資產時使用這些路徑。

3.2.6 config.assets.precompile

允許您指定在執行 rake assets:precompile 時要預編譯的其他資產(除了 application.cssapplication.js)。

3.2.7 config.assets.unknown_asset_fallback

如果您使用 sprockets-rails 3.2.0 或更高版本,則允許您在資產不在管道中時修改 asset pipeline 的行為。預設為 false

3.2.8 config.assets.prefix

定義提供資產的字首。預設為 /assets

3.2.9 config.assets.manifest

定義用於資產預編譯器清單檔案的完整路徑。預設為公共資料夾內 config.assets.prefix 目錄中名為 manifest-<random>.json 的檔案。

3.2.10 config.assets.digest

允許在資產名稱中使用 SHA256 指紋。預設設定為 true

3.2.11 config.assets.debug

禁用資產的串聯和壓縮。在 development.rb 中預設設定為 true

3.2.12 config.assets.version

是在 SHA256 雜湊產生中使用的選項字串。這可以更改為強制重新編譯所有檔案。

3.2.13 config.assets.compile

是一個布林值,可用於在生產中開啟實時鏈輪編譯。

3.2.14 config.assets.logger

接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器。預設與在 config.logger 設定的相同。將 config.assets.logger 設定為 false 將關閉服務資產日誌記錄。

3.2.15 config.assets.quiet

禁用資產請求的日誌記錄。在 development.rb 中預設設定為 true

3.3 設定產生器

Rails 允許您更改與 config.generators 方法一起使用的產生器。這個方法需要一個塊:

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

此塊中可以使用的全套方法如下:

  • force_plural 允許使用複數的 model 名稱。預設為 false
  • helper 定義是否產生 helpers。預設為 true
  • integration_tool 定義了用於產生整合測試的整合工具。預設為 :test_unit
  • system_tests 定義了使用哪個整合工具來產生系統測試。預設為 :test_unit
  • orm 定義使用哪個 orm。預設為 false,預設使用 Active Record。
  • resource_controller 定義了在使用 bin/rails generate resource 時使用哪個產生器來產生 controller。預設為 :controller
  • resource_route 定義是否應該產生資源路由定義 或不。預設為 true
  • scaffold_controllerresource_controller 不同,定義了在使用 bin/rails generate scaffold 時使用哪個產生器來產生 scaffolded controller。預設為 :scaffold_controller
  • test_framework 定義要使用的測試框架。預設為 false,預設使用 minitest。
  • template_engine 定義使用哪個模板引擎,例如 ERB 或 Haml。預設為 :erb

3.4 設定中介軟體

每個 Rails 應用程式都帶有一組標準的中介軟體,它在開發環境中按以下順序使用:

3.4.1 ActionDispatch::HostAuthorization

防止 DNS 重新繫結和其他 Host 標頭攻擊。 預設包含在開發環境中,設定如下:

Rails.application.config.hosts = [
  IPAddr.new("0.0.0.0/0"),        # All IPv4 addresses.
  IPAddr.new("::/0"),             # All IPv6 addresses.
  "localhost",                    # The localhost reserved domain.
  ENV["RAILS_DEVELOPMENT_HOSTS"]  # Additional comma-separated hosts for development.
]

在其他環境中 Rails.application.config.hosts 為空且沒有 將完成 Host 標頭檢查。如果你想防範header 對生產的攻擊,您必須手動允許允許的主機 和:

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

使用案例檢查請求的主機與 hosts 條目 運算子 (#===),它讓 hosts 支援 Regexp 型別的條目, ProcIPAddr 僅舉幾例。這是一個帶有正則表示式的示例。

# 允許來自子域的請求,例如 `www.product.com` 和
# `beta1.product.com`。
Rails.application.config.hosts << /.*\.product\.com/

提供的正則表示式將被兩個錨點(\A\z)包裹,因此它 必須匹配整個主機名。 /product.com/,例如,一旦錨定, 將無法匹配 www.product.com

支援一種特殊情況,允許您允許所有子域:

# 允許來自子域的請求,例如 `www.product.com` 和
# `beta1.product.com`。
Rails.application.config.hosts << ".product.com"

您可以透過設定從主機授權檢查中排除某些請求 config.host_configuration.exclude

# 從主機檢查中排除對 /healthcheck/ 路徑的請求
Rails.application.config.host_configuration = {
  exclude: ->(request) { request.path =~ /healthcheck/ }
}

當請求到達未經授權的主機時,預設的 Rack 應用程式 將執行並以 403 Forbidden 回應。這可以透過設定自定義 config.host_configuration.response_app。例如:

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

強制使用 HTTPS 處理每個請求。如果 config.force_ssl 設定為 true,則啟用。傳遞給它的選項可以透過設定 config.ssl_options 來設定。

3.4.3 ActionDispatch::Static

用於服務靜態資產。如果 config.public_file_server.enabledfalse,則禁用。如果您需要提供未命名為 index 的靜態目錄索引檔案,請設定 config.public_file_server.index_name。例如,要為目錄請求提供 main.html 而不是 index.html,請將 config.public_file_server.index_name 設定為 "main"

3.4.4 ActionDispatch::Executor

允許執行緒安全程式碼重新載入。如果 config.allow_concurrencyfalse,則禁用,這會導致載入 Rack::LockRack::Lock 將應用程式包裝在互斥鎖中,因此一次只能由一個執行緒呼叫。

3.4.5 ActiveSupport::Cache::Strategy::LocalCache

用作基本的記憶體支援快取。此快取不是執行緒安全的,僅用作單個執行緒的臨時記憶體快取。

3.4.6 Rails::Rack::Logger

通知日誌請求已經開始。請求完成後,重新整理所有日誌。

3.4.7 ActionDispatch::ShowExceptions

如果請求是本地的或者如果 config.consider_all_requests_local 設定為 true,則拯救應用程式返回的任何異常並呈現漂亮的異常頁面。如果 config.action_dispatch.show_exceptions 設定為 false,則無論如何都會引發異常。

3.4.8 ActionDispatch::RequestId

為回應提供唯一的 X-Request-Id 標頭並啟用 ActionDispatch::Request#uuid 方法。可使用 config.action_dispatch.request_id_header 進行設定。

3.4.9 ActionDispatch::RemoteIp

檢查 IP 欺騙攻擊並從請求標頭中獲取有效的 client_ip。可使用 config.action_dispatch.ip_spoofing_checkconfig.action_dispatch.trusted_proxies 選項進行設定。

3.4.10 Rack::Sendfile

攔截回應其正文是從檔案提供的,並將其替換為特定於伺服器的 X-Sendfile 標頭。可使用 config.action_dispatch.x_sendfile_header 進行設定。

3.4.11 ActionDispatch::Callbacks

在服務請求之前執行準備 callbacks。

3.4.12 ActionDispatch::Cookies

為請求設定 cookies。

3.4.13 ActionDispatch::Session::CookieStore

負責將 session 儲存在 cookies 中。透過將 config.action_controller.session_store 更改為備用 value,可以為此使用備用中介軟體。此外,可以使用 config.action_controller.session_options 設定傳遞給它的選項。

3.4.14 ActionDispatch::Flash

設定 flash keys。僅當 config.action_controller.session_store 設定為 value 時可用。

3.4.15 Rack::MethodOverride

如果設定了 params[:_method],則允許覆蓋該方法。這是支援 PATCH、PUT 和 DELETE HTTP 方法型別的中介軟體。

3.4.16 Rack::Head

將 HEAD 請求轉換為 GET 請求併為它們提供服務。

3.4.17 新增自定義中介軟體

除了這些常用的中介軟體,您還可以使用 config.middleware.use 方法新增自己的中介軟體:

config.middleware.use Magical::Unicorns

這會將 Magical::Unicorns 中介軟體放在堆疊的末尾。如果您希望在另一箇中間件之前新增中介軟體,則可以使用 insert_before

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

或者您可以使用索引將中介軟體插入到精確位置。例如,如果你想在棧頂插入 Magical::Unicorns 中介軟體,你可以這樣做,像這樣:

config.middleware.insert_before 0, Magical::Unicorns

還有 insert_after 將一個接一個地插入中介軟體:

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

中介軟體也可以完全換出並替換為其他:

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

中介軟體可以從一個地方移動到另一個地方:

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

這將移動 Magical::Unicorns 中介軟體之前 ActionDispatch::Flash。您也可以在以下之後移動它:

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

它們也可以完全從堆疊中刪除:

config.middleware.delete Rack::MethodOverride

3.5 設定 i18n

所有這些設定選項都委託給 I18n 庫。

3.5.1 config.i18n.available_locales

定義應用程式允許的可用區域設定。預設為在語言環境檔案中找到的所有語言環境 keys,通常在新應用程式中只有 :en

3.5.2 config.i18n.default_locale

設定用於 i18n 的應用程式的預設語言環境。預設為 :en

3.5.3 config.i18n.enforce_available_locales

確保所有透過 i18n 的語言環境都必須在 available_locales 列表中宣告,在設定不可用的語言環境時引發 I18n::InvalidLocale 異常。預設為 true。除非強烈需要,否則建議不要禁用此選項,因為這可以作為防止從使用者輸入設定任何無效區域設定的安全措施。

3.5.4 config.i18n.load_path

設定 Rails 用於查詢語言環境檔案的路徑。預設為 config/locales/**/*.{yml,rb}

3.5.5 config.i18n.raise_on_missing_translations

確定是否應為丟失的翻譯引發錯誤 在 controllers 和 views 中。預設為 false

3.5.6 config.i18n.fallbacks

為丟失的翻譯設定回退行為。以下是此選項的 3 個用法示例:

  • 您可以將選項設定為 true 以使用預設語言環境作為後備,如下所示:

    config.i18n.fallbacks = true
    
  • 或者您可以將一組語言環境設定為後備,如下所示:

    config.i18n.fallbacks = [:tr, :en]
    
  • 或者您可以單獨為語言環境設定不同的回退。例如,如果您想將 :tr 用於 :az:de,將 :en 用於 :da 作為後備,您可以這樣做,如下所示:

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

3.6 設定 Active Model

3.6.1 config.active_model.i18n_customize_full_message

是一個布林值 value,它控制是否可以在屬性或語言環境檔案中的 model 級別覆蓋 full_message 錯誤格式。預設為 false

3.7 設定 Active Record

config.active_record 包含多種設定選項:

3.7.1 config.active_record.logger

接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器,然後將其傳遞給任何新的資料庫連線。您可以透過在 Active Record model 類或 Active Record model 實例上呼叫 logger 來檢索此記錄器。設定為 nil 以禁用日誌記錄。

3.7.2 config.active_record.primary_key_prefix_type

允許您調整主 key 列的命名。預設情況下,Rails 假定主要的 key 列名為 id(並且不需要設定此設定選項)。還有另外兩個選擇:

  • :table_name 將成為 Customer 類 customerid 的主要 key。
  • :table_name_with_underscore 將成為 Customer 類 customer_id 的主要 key。
3.7.3 config.active_record.table_name_prefix

允許您設定要新增到表名稱的全域性字串。如果將其設定為 northwest_,則 Customer 類將查詢 northwest_customers 作為其表。預設值為空字串。

3.7.4 config.active_record.table_name_suffix

允許您設定要附加到表名的全域性字串。如果將其設定為 _northwest,則 Customer 類將查詢 customers_northwest 作為其表。預設值為空字串。

3.7.5 config.active_record.schema_migrations_table_name

允許您設定一個字串以用作模式 migrations 表的名稱。

3.7.6 config.active_record.internal_metadata_table_name

允許您設定一個字串以用作內部元資料表的名稱。

3.7.7 config.active_record.protected_environments

允許您設定應禁止破壞性 actions 的環境名稱陣列。

3.7.8 config.active_record.pluralize_table_names

指定 Rails 將在資料庫中查詢單數還是複數表名。如果設定為 true(預設值),則 Customer 類將使用 customers 表。如果設定為 false,則 Customer 類將使用 customer 表。

3.7.9 config.active_record.default_timezone

確定從資料庫中提取日期和時間時是使用 Time.local(如果設定為 :local)還是 Time.utc(如果設定為 :utc)。預設值為 :utc

3.7.10 config.active_record.schema_format

控制將資料庫模式轉儲到檔案的格式。對於依賴於 migrations 的資料庫獨立版本,選項是 :ruby(預設值),對於一組(可能依賴於資料庫的)SQL 語句,選項是 :sql

3.7.11 config.active_record.error_on_ignored_order

指定在批處理查詢期間忽略查詢順序時是否應引發錯誤。選項是 true(引發錯誤)或 false(警告)。預設為 false

3.7.12 config.active_record.timestamped_migrations

控制 migrations 是用序列整數編號還是用時間戳編號。預設為 true,以使用時間戳,如果有多個開發人員在同一應用程式上工作,則首選使用時間戳。

3.7.13 config.active_record.lock_optimistically

控制 Active Record 是否使用樂觀鎖,預設為 true

3.7.14 config.active_record.cache_timestamp_format

控制快取key中時間戳value的格式。預設為 :usec

3.7.15 config.active_record.record_timestamps

是一個布林值 value,它控制是否對 model 上的 createupdate 操作進行時間戳記。預設的 value 是 true

3.7.16 config.active_record.partial_inserts

是一個布林值 value 並控制在建立新記錄時是否使用部分寫入(即是否僅插入與預設值不同的設定屬性)。預設的 value 是 true

3.7.17 config.active_record.partial_updates

是一個布林值 value 並控制在更新現有記錄時是否使用部分寫入(即是否只更新設定的髒屬性)。請注意,在使用部分更新時,您還應該使用樂觀鎖定 config.active_record.lock_optimistically,因為平行計算更新可能會根據可能過時的讀取狀態寫入屬性。預設的 value 是 true

3.7.18 config.active_record.maintain_test_schema

是一個布林值 value,它控制在您執行測試時 Active Record 是否應該嘗試使您的測試資料庫架構與 db/schema.rb(或 db/structure.sql)保持最新。預設值為 true

3.7.19 config.active_record.dump_schema_after_migration

是控制是否應該發生模式轉儲的標誌 (db/schema.rbdb/structure.sql) 當您執行 migrations 時。這設定為 false 中的 config/environments/production.rb 由 Rails 產生。這 如果未設定此設定,則預設 value 為 true

3.7.20 config.active_record.dump_schemas

控制呼叫 db:schema:dump 時將轉儲的資料庫模式。 選項是 :schema_search_path(預設值),它轉儲 schema_search_path 中列出的任何模式, :all 總是轉儲所有模式,而不管 schema_search_path, 或一串逗號分隔的模式。

3.7.21 config.active_record.belongs_to_required_by_default

是一個布林值 value 並控制記錄是否未透過驗證,如果 belongs_to association 不存在。

3.7.22 config.active_record.action_on_strict_loading_violation

如果strict_loading 被設定在一個 association。在所有環境中,預設的 value 都是 :raise。有可能 更改為 :log 以將違規傳送到記錄器而不是引發。

3.7.23 config.active_record.strict_loading_by_default

是一個布林值 value,它可以透過以下方式啟用或禁用嚴格載入模式 預設。預設為 false

3.7.24 config.active_record.warn_on_records_fetched_greater_than

允許為查詢結果大小設定警告閾值。如果數量 查詢返回的記錄超過閾值,將記錄警告。這 可用於識別可能導致記憶體膨脹的查詢。

3.7.25 config.active_record.index_nested_attribute_errors

允許使用索引顯示巢狀 has_many 關係的錯誤 以及錯誤。預設為 false

3.7.26 config.active_record.use_schema_cache_dump

使使用者能夠從 db/schema_cache.yml 獲取架構快取資訊 (由 bin/rails db:schema:cache:dump 產生),而不必傳送 查詢資料庫以獲取此資訊。預設為 true

3.7.27 config.active_record.cache_versioning

指示是否使用穩定的 #cache_key 方法,並伴隨有 在 #cache_version 方法中更改版本。

3.7.28 config.active_record.collection_cache_versioning

當被快取的物件型別為相同時,啟用相同的快取 key ActiveRecord::Relation 透過移動易失性資訊(最大 將關係的快取 key 的更新時間和計數更新到快取版本中 支援回收快取key。

3.7.29 config.active_record.has_many_inversing

啟用在遍歷 belongs_tohas_many 時設定反向記錄 associations。

3.7.30 config.active_record.legacy_connection_handling

允許啟用新的連線處理 API。對於使用多個 資料庫,這個新的 API 提供了對細粒度連線交換的支援。

3.7.31 config.active_record.destroy_association_async_job

允許指定將用於在後臺銷燬關聯記錄的作業。預設為 ActiveRecord::DestroyAssociationAsyncJob

3.7.32 config.active_record.queues.destroy

允許指定用於銷燬作業的 Active Job 佇列。當此選項為 nil 時,清除作業將傳送到預設的 Active Job 佇列(請參閱 config.active_job.default_queue_name)。預設為 nil

3.7.33 config.active_record.enumerate_columns_in_select_statements

當為 true 時,將始終在 SELECT 語句中包含列名,並避免萬用字元 SELECT * FROM ... 查詢。例如,這可以避免在將列新增到 PostgreSQL 資料庫時出現準備好的語句快取錯誤。預設為 false

3.7.34 config.active_record.destroy_all_in_batches

確保 ActiveRecord::Relation#destroy_all 執行記錄的刪除 批次。 ActiveRecord::Relation#destroy_all 將不再返回集合 啟用此選項後刪除的記錄。

3.7.35 config.active_record.verify_foreign_keys_for_fixtures

在測試中載入夾具後,確保所有外部 key 約束都有效。僅受 PostgreSQL 和 SQLite 支援。預設為 false

3.7.36 config.active_record.query_log_tags_enabled

指定是否啟用介面卡級查詢註釋。預設為 false

3.7.37 config.active_record.query_log_tags

定義一個 Array 指定要插入到 SQL 中的 key/value 標籤 評論。預設為 [ :application ],一個預定義的標籤返回 應用名稱。

3.7.38 config.active_record.cache_query_log_tags

指定是否啟用查詢日誌標籤的快取。對於應用 有大量查詢,快取查詢日誌標籤可以提供一個 當上下文在生命週期內沒有改變時的效能優勢 請求或作業執行。預設為 false

3.7.39 config.active_record.schema_cache_ignored_tables

定義產生模式時應忽略的表列表 快取。它接受一個 Array 字串,代表表名,或者 常用表達。

3.7.40 ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans

控制 Active Record MySQL 介面卡是否將所有 tinyint(1) 列視為布林值。預設為 true

3.7.41 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.create_unlogged_table

控制 PostgreSQL 建立的資料庫表是否應該“unlogged”,這可以加快 提高效能,但如果資料庫崩潰會增加資料丟失的風險。它是 強烈建議您不要在生產環境中啟用此功能。 在所有環境中預設為 false

3.7.42 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.datetime_type

控制在呼叫 datetime 時 Active Record PostgreSQL 介面卡應使用的本機型別 migration 或模式。它需要一個 symbol,它必須對應於 已設定 NATIVE_DATABASE_TYPES。預設是:timestamp,意思是 migration 中的 t.datetime 將建立一個“沒有時區的時間戳”列。 要使用“帶時區的時間戳”,請將其更改為 :timestamptz 初始化程式。你應該執行 bin/rails db:migrate 來重建你的 schema.rb 如果你改變這一點。

3.7.43 ActiveRecord::SchemaDumper.ignore_tables

接受不應_包含在任何產生的架構檔案中的表陣列。

3.7.44 ActiveRecord::SchemaDumper.fk_ignore_pattern

允許設定一個不同的正則表示式,用於決定 是否應將外部 key 的名稱轉儲到 db/schema.rb。經過 預設情況下,以 fk_rails_ 開頭的外部 key 名稱不會匯出到 資料庫模式轉儲。預設為 /^fk_rails_[0-9a-f]{10}$/

3.8 設定 Action Controller

config.action_controller 包括許多設定設定:

3.8.1 config.action_controller.asset_host

設定資產的主機。當 CDN 用於託管資產而不是應用程式伺服器本身時很有用。如果您對 Action Mailer 有不同的設定,您應該只使用它,否則使用 config.asset_host

3.8.2 config.action_controller.perform_caching

設定應用程式是否應執行由 Action Controller 元件提供的快取功能。在開發環境中設定為 false,在生產環境中設定為 Action Controller。如果未指定,則預設為 Action Controller。

3.8.3 config.action_controller.default_static_extension

設定用於快取頁面的擴充套件。預設為 .html

3.8.4 config.action_controller.include_all_helpers

設定所有檢視 helpers 是否在任何地方都可用或範圍為相應的 controller。如果設定為 false,則 UsersHelper 方法僅可用於作為 UsersController 的一部分呈現的 views。如果 trueUsersHelper 方法隨處可用。預設設定行為(當此選項未明確設定為 truefalse 時)是所有檢視 helpers 可用於每個 controller。

3.8.5 config.action_controller.logger

接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器,然後用於記錄來自 Action Controller 的資訊。設定為 nil 以禁用日誌記錄。

3.8.6 config.action_controller.request_forgery_protection_token

為 RequestForgery 設定 token 引數名稱。呼叫 protect_from_forgery 預設設定為 :authenticity_token

3.8.7 config.action_controller.allow_forgery_protection

啟用或禁用 CSRF 保護。預設情況下,在測試環境中為 false,在所有其他環境中為 true

3.8.8 config.action_controller.forgery_protection_origin_check

設定是否應根據站點的來源檢查 HTTP Origin 標頭作為額外的 CSRF 防禦。

3.8.9 config.action_controller.per_form_csrf_tokens

設定 CSRF tokens 是否僅對它們產生的方法/action 有效。

3.8.10 config.action_controller.default_protect_from_forgery

確定是否在 ActionController::Base 上添加了偽造保護。

3.8.11 config.action_controller.urlsafe_csrf_tokens

設定產生的 CSRF tokens 是否是 URL 安全的。

3.8.12 config.action_controller.relative_url_root

可用於告訴 Rails 您正在部署到子目錄。預設值為 ENV['RAILS_RELATIVE_URL_ROOT']

3.8.13 config.action_controller.permit_all_parameters

將所有的質量分配引數設定為預設允許。預設的 value 是 false

3.8.14 config.action_controller.action_on_unpermitted_parameters

當找到未明確允許的引數時控制行為。在測試和開發環境中預設值為 :log,否則為 false。 values 可以是:

  • false 不帶 action
  • :logunpermitted_parameters.action_controller 主題上發出 ActiveSupport::Notifications.instrument 事件並在除錯級別記錄
  • :raise 引發 ActionController::UnpermittedParameters 異常
3.8.15 config.action_controller.always_permitted_parameters

設定預設允許的允許引數列表。預設的 values 是 ['controller', 'action']

3.8.16 config.action_controller.enable_fragment_cache_logging

確定是否以詳細格式記錄片段快取讀取和寫入,如下所示:

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

預設情況下,它設定為 false 導致以下輸出:

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

當發生未經許可的開放重定向時引發 ArgumentError。預設的 value 是 false

3.8.18 config.action_controller.log_query_tags_around_actions

確定查詢標籤的 controller 上下文是否會自動 透過 around_filter 更新。預設的 value 是 true

3.9 設定 Action 排程

3.9.1 config.action_dispatch.session_store

設定 session 資料的儲存名稱。預設為:cookie_store;其他有效選項包括 :active_record_store:mem_cache_store 或您自己的自定義類的名稱。

3.9.2 config.action_dispatch.default_headers

是帶有 HTTP 標頭的雜湊,預設情況下在每個回應中設定。預設情況下,這被定義為:

config.action_dispatch.default_headers = {
  'X-Frame-Options' => 'SAMEORIGIN',
  'X-XSS-Protection' => '1; mode=block',
  'X-Content-Type-Options' => 'nosniff',
  'X-Download-Options' => 'noopen',
  'X-Permitted-Cross-Domain-Policies' => 'none',
  'Referrer-Policy' => 'strict-origin-when-cross-origin'
}
3.9.3 config.action_dispatch.default_charset

指定所有渲染的預設字符集。預設為 nil

3.9.4 config.action_dispatch.tld_length

設定應用程式的 TLD(頂級域)長度。預設為 1

3.9.5 config.action_dispatch.ignore_accept_header

用於確定是否忽略來自請求的接受標頭。預設為 false

3.9.6 config.action_dispatch.x_sendfile_header

指定伺服器特定的 X-Sendfile 標頭。這對於從伺服器傳送加速檔案很有用。例如,它可以設定為 Apache 的“X-Sendfile”。

3.9.7 config.action_dispatch.http_auth_salt

設定 HTTP Auth salt value。預設值 到 'http authentication'

設定有符號的 cookies 鹽 value。 預設為 'signed cookie'

設定加密的 cookies 鹽 value。預設為 'encrypted cookie'

設定已簽名的加密 cookies 鹽 value。預設為“簽名加密” cookie'`。

設定經過身份驗證的加密 cookie 鹽。預設為“已認證” 加密的 cookie'`。

設定用於加密 cookies 的密碼。這預設為 "aes-256-gcm"

設定用於簽名的 cookies 的摘要。預設為 "SHA1"

3.9.14 config.action_dispatch.cookies_rotations

允許輪換加密和簽名的 cookies 的秘密、密碼和摘要。

控制簽名和加密的 cookies 是使用 AES-256-GCM 密碼還是 較舊的 AES-256-CBC 密碼。預設為 true

3.9.16 config.action_dispatch.use_cookies_with_metadata

允許使用嵌入的目的元資料寫入 cookies。它預設為 true

3.9.17 config.action_dispatch.perform_deep_munge

設定是否應對引數執行 deep_munge 方法。 詳見安全指南 資訊。預設為 true

3.9.18 config.action_dispatch.rescue_responses

設定分配給 HTTP 狀態的異常。它接受一個雜湊,您可以指定成對的異常/狀態。預設情況下,這被定義為:

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
}

任何未設定的異常都將對映到 500 Internal Server Error。

3.9.19 config.action_dispatch.return_only_request_media_type_on_content_type

ActionDispatch::Request#content_type 的返回值 value 改為 未經修改的 Content-Type 標頭。

3.9.20 config.action_dispatch.cookies_same_site_protection

設定 cookies 時設定 SameSite 屬性的預設 value。 設定為 nil 時,不新增 SameSite 屬性。允許 value 的 根據請求動態設定的 SameSite 屬性,一個 可以指定proc。例如:

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

設定重定向非 GET/HEAD 時使用的預設 HTTP 狀態程式碼 ActionDispatch::SSL 中介軟體中從 HTTP 到 HTTPS 的請求。預設值 到 https://tools.ietf.org/html/rfc7538 中定義的 308

3.9.22 config.action_dispatch.log_rescued_responses

啟用記錄在 rescue_responses 中設定的那些未處理的異常。它 預設為 true

3.9.23 ActionDispatch::Callbacks.before

在請求之前執行一段程式碼。

3.9.24 ActionDispatch::Callbacks.after

在請求之後執行一段程式碼。

3.10 設定 Action View

config.action_view 包含少量設定設定:

3.10.1 config.action_view.cache_template_loading

控制是否應在每個請求上重新載入模板。預設為為 config.cache_classes 設定的任何值。

3.10.2 config.action_view.field_error_proc

提供一個 HTML 產生器來顯示來自 Active Model 的錯誤。預設是

Proc.new do |html_tag, instance|
  %Q(<div class="field_with_errors">#{html_tag}</div>).html_safe
end
3.10.3 config.action_view.default_form_builder

告訴 Rails 預設使用哪個表單構建器。預設是 ActionView::Helpers::FormBuilder。如果您希望表單產生器類是 初始化後加載(因此在開發中的每個請求都會重新載入), 您可以將其作為 String 傳遞。

3.10.4 config.action_view.logger

接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器,然後用於記錄來自 Action View 的資訊。設定為 nil 以禁用日誌記錄。

3.10.5 config.action_view.erb_trim_mode

給出 ERB 使用的修剪模式。它預設為 '-',在使用 <%= -%><%= =%> 時開啟尾空格和換行符的修剪。有關詳細資訊,請參閱 Erubis 文件

3.10.6 config.action_view.embed_authenticity_token_in_remote_forms

允許您在表單中設定 authenticity_token 的預設行為 remote: true。預設情況下它設定為 false,這意味著遠端表單 將不包括 authenticity_token,這在您 片段快取表單。遠端表單從 meta 獲取真實性 標籤,所以嵌入是不必要的,除非你支援沒有 JavaScript。在這種情況下,您可以將 authenticity_token: true 作為 表單選項或將此設定設定設定為 true

3.10.7 config.action_view.prefix_partial_path_with_controller_namespace

確定是否從名稱空間 controllers 呈現的模板中的子目錄中查詢部分。例如,考慮一個名為 Admin::ArticlesController 的控制器,它呈現此模板:

<%= render @article %>

預設設定為 true,它使用 /admin/articles/_article.erb 處的部分。將 value 設定為 false 將呈現 /articles/_article.erb,這與從非名稱空間 controller(例如 ArticlesController)呈現的行為相同。

3.10.8 config.action_view.automatically_disable_submit_tag

確定 submit_tag 是否應該在點選時自動禁用,這個 預設為 true

3.10.9 config.action_view.debug_missing_translation

確定是否將缺少的翻譯 key 包裝在 <span> 標籤中。預設為 true

3.10.10 config.action_view.form_with_generates_remote_forms

確定 form_with 是否產生遠端表單。

3.10.11 config.action_view.form_with_generates_ids

確定 form_with 是否在輸入上產生 ID。

3.10.12 config.action_view.default_enforce_utf8

確定是否產生帶有隱藏標記的表單,該標記強制舊版本的 Internet Explorer 提交以 UTF-8 編碼的表單。預設為 false

3.10.13 config.action_view.image_loading

為由 image_tag helper 呈現的 <img> 標籤的 loading 屬性指定預設 value。例如,設定為"lazy"時,image_tag渲染的<img>標籤將包含loading="lazy",它指示瀏覽器等待影象靠近view埠以載入它。 (這個 value 仍然可以透過傳遞例如 loading: "eager"image_tag 來覆蓋每個影象。)預設為 nil

3.10.14 config.action_view.image_decoding

為由 image_tag helper 呈現的 <img> 標籤的 decoding 屬性指定預設 value。預設為 nil

3.10.15 config.action_view.annotate_rendered_view_with_filenames

確定是否使用模板檔名註釋渲染的 view。預設為 false

確定 javascript_include_tagstylesheet_link_tag 是否會產生預載入資產的 Link 標頭。

3.10.17 config.action_view.button_to_generates_button_tag

確定 button_to 是否將呈現 <button> 元素,無論內容是作為第一個引數還是作為塊傳遞。

3.10.18 config.action_view.apply_stylesheet_media_default

確定 stylesheet_link_tag 是否將 screen 渲染為屬性 media 未提供時的預設 value。

3.11 設定 Action Mailbox

config.action_mailbox 提供以下設定選項:

3.11.1 config.action_mailbox.logger

包含 Action Mailbox 使用的記錄器。它接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器。預設值為 Rails.logger

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

接受 ActiveSupport::Duration 指示處理 ActionMailbox::InboundEmail 記錄後應銷燬多長時間。預設為 30.days

# 在處理後 14 天焚燒入站電子郵件。
config.action_mailbox.incinerate_after = 14.days
3.11.3 config.action_mailbox.queues.incineration

接受 symbol 指示用於焚燒作業的 Active Job 佇列。當此選項為 nil 時,焚燒作業將傳送到預設的 Active Job 佇列(請參閱 config.active_job.default_queue_name)。

3.11.4 config.action_mailbox.queues.routing

接受 symbol 指示用於路由作業的 Active Job 佇列。當此選項為 nil 時,路由作業將傳送到預設的 Active Job 佇列(請參閱 config.active_job.default_queue_name)。

3.11.5 config.action_mailbox.storage_service

接受 symbol 指示用於上傳電子郵件的 Active Storage 服務。當此選項為 nil 時,電子郵件將上傳到預設的 Active Storage 服務(請參閱 config.active_storage.service)。

3.12 設定 Action Mailer

config.action_mailer 上有許多可用的設定:

3.12.1 config.action_mailer.asset_host

設定資產的主機。當 CDN 用於託管資產而不是應用程式伺服器本身時很有用。如果您對 Action Controller 有不同的設定,您應該只使用它,否則使用 config.asset_host

3.12.2 config.action_mailer.logger

接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器,然後用於記錄來自 Action Mailer 的資訊。設定為 nil 以禁用日誌記錄。

3.12.3 config.action_mailer.smtp_settings

允許詳細設定 :smtp 交付方式。它接受選項的雜湊,其中可以包括以下任何選項:

  • :address - 允許您使用遠端郵件伺服器。只需將其從其預設的“localhost”設定更改即可。
  • :port - 如果您的郵件伺服器不在埠 25 上執行,您可以更改它。
  • :domain - 如果你需要指定一個 HELO 域,你可以在這裡做。
  • :user_name - 如果您的郵件伺服器需要身份驗證,請在此設定中設定使用者名稱。
  • :password - 如果您的郵件伺服器需要身份驗證,請在此設定中設定密碼。
  • :authentication - 如果您的郵件伺服器需要身份驗證,則需要在此處指定身份驗證型別。這是一個 symbol 和 :plain:login:cram_md5 之一。
  • :enable_starttls_auto - 檢測您的 SMTP 伺服器中是否啟用了 STARTTLS 並開始使用它。預設為 true
  • :openssl_verify_mode - 使用 TLS 時,您可以設定 OpenSSL 檢查證書的方式。如果您需要驗證自簽名和/或萬用字元證書,這將非常有用。這可以是 OpenSSL 驗證常量之一,:none:peer -- 或直接分別為 OpenSSL::SSL::VERIFY_NONEOpenSSL::SSL::VERIFY_PEER 的常量。
  • :ssl/:tls - 啟用 SMTP 連線以使用 SMTP/TLS(SMTPS:透過直接 TLS 連線的 SMTP)。
  • :open_timeout - 嘗試開啟連線時等待的秒數。
  • :read_timeout - 等待 read(2) 呼叫超時的秒數。
3.12.4 config.action_mailer.smtp_timeout

允許設定 :open_timeout:read_timeout values 為 :smtp 交付方式。

3.12.5 config.action_mailer.sendmail_settings

允許詳細設定 sendmail 交付方式。它接受選項的雜湊,其中可以包括以下任何選項:

  • :location - sendmail 可執行檔案的位置。預設為 /usr/sbin/sendmail
  • :arguments - 命令列引數。預設為 -i
3.12.6 config.action_mailer.raise_delivery_errors

指定在無法完成電子郵件傳送時是否引發錯誤。預設為 true

3.12.7 config.action_mailer.delivery_method

定義交付方式,預設為:smtp。有關詳細資訊,請參閱 Action Mailer 指南中的設定部分

3.12.8 config.action_mailer.perform_deliveries

指定郵件是否會實際傳送,預設情況下為 true。可以方便地將其設定為 false 進行測試。

3.12.9 config.action_mailer.default_options

設定 Action Mailer 預設值。用於為每個郵件程式設定諸如 fromreply_to 之類的選項。這些預設為:

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

分配雜湊以設定其他選項:

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

註冊觀察者,郵件送達時會收到通知。

config.action_mailer.observers = ["MailObserver"]
3.12.11 config.action_mailer.interceptors

註冊將在傳送郵件之前呼叫的攔截器。

config.action_mailer.interceptors = ["MailInterceptor"]
3.12.12 config.action_mailer.preview_interceptors

註冊將在郵件 previewed 之前呼叫的攔截器。

config.action_mailer.preview_interceptors = ["MyPreviewMailInterceptor"]
3.12.13 config.action_mailer.preview_path

指定郵件程式 previews 的位置。

config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
3.12.14 config.action_mailer.show_previews

啟用或禁用郵件程式 previews。預設情況下,這是正在開發中的 true

config.action_mailer.show_previews = false
3.12.15 config.action_mailer.deliver_later_queue_name

指定用於傳送作業的 Active Job 佇列。當此選項設定為 nil 時,交付作業將傳送到預設的 Active Job 佇列(請參閱 config.active_job.default_queue_name)。確保您的 Active Job 介面卡也設定為處理指定的佇列,否則交付作業可能會被靜默忽略。

3.12.16 config.action_mailer.perform_caching

指定郵件程式模板是否應執行片段快取。如果未指定,則預設為 true

3.12.17 config.action_mailer.delivery_job

指定郵件的傳遞作業。

3.13 設定 Active Support

Active Support 中有幾個可用的設定選項:

3.13.1 config.active_support.bare

在啟動 Rails 時啟用或禁用載入 active_support/all。預設為 nil,表示已載入 active_support/all

3.13.2 config.active_support.test_order

設定執行測試用例的順序。可能的 values 是 :random:sorted。預設為 :random

3.13.3 config.active_support.escape_html_entities_in_json

啟用或禁用 JSON 序列化中 HTML 實體的轉義。預設為 true

3.13.4 config.active_support.use_standard_json_time_format

啟用或禁用將日期序列化為 ISO 8601 格式。預設為 true

3.13.5 config.active_support.time_precision

設定 JSON 編碼時間 values 的精度。預設為 3

3.13.6 config.active_support.hash_digest_class

允許設定摘要類以用於產生非敏感摘要,例如 ETag 標頭。

3.13.7 config.active_support.key_generator_hash_digest_class

允許設定摘要類以用於從設定的秘密庫派生秘密,例如用於加密的 cookies。

3.13.8 config.active_support.use_authenticated_message_encryption

指定是否使用 AES-256-GCM 認證加密作為預設密碼來加密訊息而不是 AES-256-CBC。

3.13.9 config.active_support.cache_format_version

指定要使用的快取序列化程式的版本。可能的 values 是 6.17.0

3.13.10 config.active_support.deprecation

設定棄用警告的行為。選項為 :raise:stderr:log:notify:silence。預設值為 :stderr。或者,您可以設定 ActiveSupport::Deprecation.behavior

3.13.11 config.active_support.disallowed_deprecation

設定不允許的棄用警告的行為。選項為 :raise:stderr:log:notify:silence。預設值為 :raise。或者,您可以設定 ActiveSupport::Deprecation.disallowed_behavior

3.13.12 config.active_support.disallowed_deprecation_warnings

設定應用程式認為不允許的棄用警告。例如,這允許將特定的棄用視為硬故障。或者,您可以設定 ActiveSupport::Deprecation.disallowed_warnings

3.13.13 config.active_support.report_deprecations

允許您禁用所有棄用警告(包括不允許的棄用);它使 ActiveSupport::Deprecation.warn 成為空操作。這在生產中預設啟用。

3.13.14 ActiveSupport::Logger.silencer

設定為 false 以禁用塊中的靜音記錄功能。預設值為 true

3.13.15 ActiveSupport::Cache::Store.logger

指定要在快取儲存操作中使用的記錄器。

3.13.16 ActiveSupport.utc_to_local_returns_utc_offset_times

設定 ActiveSupport::TimeZone.utc_to_local 以返回一個 UTC 時間 偏移量而不是包含該偏移量的 UTC 時間。

3.14 設定 Active Job

config.active_job 提供以下設定選項:

3.14.1 config.active_job.queue_adapter

設定佇列後端的介面卡。預設介面卡為 :async。有關內建介面卡的最新列表,請參閱 ActiveJob::QueueAdapters API 文件

# 確保你的 Gemfile 中有介面卡的 gem
# 並按照介面卡的具體安裝
# 和部署說明。
config.active_job.queue_adapter = :sidekiq
3.14.2 config.active_job.default_queue_name

可用於更改預設佇列名稱。預設情況下,這是 "default"

config.active_job.default_queue_name = :medium_priority
3.14.3 config.active_job.queue_name_prefix

允許您為所有作業設定可選的非空佇列名稱字首。預設情況下它是空白的,不使用。

在生產中執行時,以下設定會將給定的作業排隊到 production_high_priority 佇列中:

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

有一個預設的 value 為 '_'。如果設定了 queue_name_prefix,則 queue_name_delimiter 加入字首和非字首佇列名稱。

以下設定會將提供的作業排隊到 video_server.low_priority 佇列中:

# 必須為要使用的分隔符設定字首
config.active_job.queue_name_prefix = 'video_server'
config.active_job.queue_name_delimiter = '.'
class EncoderJob < ActiveJob::Base
  queue_as :low_priority
  #....
end
3.14.5 config.active_job.logger

接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器,然後用於記錄來自 Active Job 的資訊。您可以透過在 Active Job 類或 Active Job 實例上呼叫 logger 來檢索此記錄器。設定為 nil 以禁用日誌記錄。

3.14.6 config.active_job.custom_serializers

允許設定自定義引數序列化程式。預設為 []

3.14.7 config.active_job.log_arguments

控制是否記錄作業的引數。預設為 true

3.14.8 config.active_job.retry_jitter

控制應用於重試失敗作業時計算的延遲時間的“抖動”(隨機變化)量。

3.14.9 config.active_job.skip_after_callbacks_if_terminated

控制 after_enqueue / after_perform callbacks 是否執行 before_enqueue / before_perform callback 隨著 throw :abort 停止。

3.14.10 config.active_job.log_query_tags_around_perform

確定查詢標籤的作業上下文是否將透過以下方式自動更新 around_perform。預設的 value 是 true

3.15 設定 Action Cable

3.15.1 config.action_cable.url

接受您託管 Action Cable 的 URL 的字串 伺服器。如果您正在執行 Action Cable 伺服器,您將使用此選項 與您的主應用程式分開。

3.15.2 config.action_cable.mount_path

接受一個字串作為主伺服器的一部分掛載 Action Cable 過程。預設為 /cable。您可以將其設定為 nil 以不掛載 Action 電纜作為普通 Rails 伺服器的一部分。

您可以在 Action Cable Overview

3.16 設定 Active Storage

config.active_storage 提供以下設定選項:

3.16.1 config.active_storage.variant_processor

接受 symbol :mini_magick:vips,指定是使用 MiniMagick 還是 ruby-vips 執行變體轉換和 blob 分析。預設值為 :mini_magick

3.16.2 config.active_storage.analyzers

接受指示可用於 Active Storage blob 的分析器的類陣列。 預設情況下,這被定義為:

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

影象分析器可以提取影象 blob 的寬度和高度;影片分析器可以提取影片塊的影片/音訊通道的寬度、高度、持續時間、角度、縱橫比和存在/不存在;音訊分析器可以提取音訊 blob 的持續時間和位元率。

3.16.3 config.active_storage.previewers

接受一組類,指示 Active Storage blob 中可用的影象 previewers。 預設情況下,這被定義為:

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

PopplerPDFPreviewerMuPDFPreviewer 可以從 PDF blob 的第一頁產生縮圖; VideoPreviewer 來自影片 blob 的相關幀。

3.16.4 config.active_storage.paths

接受指示 previewer/analyzer 命令位置的選項雜湊。預設值為 {},這意味著將在預設路徑中查詢命令。可以包括以下任何選項:

  • :ffprobe - ffprobe 可執行檔案的位置。
  • :mutool - mutool 可執行檔案的位置。
  • :ffmpeg - ffmpeg 可執行檔案的位置。
config.active_storage.paths[:ffprobe] = '/usr/local/bin/ffprobe'
3.16.5 config.active_storage.variable_content_types

接受指示 Active Storage 的內容型別的字串陣列 可以透過 ImageMagick 進行轉換。 預設情況下,這被定義為:

config.active_storage.variable_content_types = %w(image/png image/gif image/jpg image/jpeg image/pjpeg 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

接受被視為網路影象內容型別的字串陣列,其中 可以在不轉換為備用 PNG 格式的情況下處理變體。 如果您想在您的應用程式中使用 WebPAVIF 變體,您可以新增 image/webpimage/avif 到這個陣列。 預設情況下,這被定義為:

config.active_storage.web_image_content_types = %w(image/png image/jpeg image/jpg image/gif)
3.16.7 config.active_storage.content_types_to_serve_as_binary

接受一個字串陣列,指示 Active Storage 將始終作為附件而不是內聯的內容型別。 預設情況下,這被定義為:

config.active_storage.content_types_to_serve_as_binary = %w(text/html text/javascript 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

接受一個字串陣列,指示 Active Storage 允許用作內聯的內容型別。 預設情況下,這被定義為:

config.active_storage.content_types_allowed_inline` = %w(image/png image/gif image/jpg image/jpeg image/tiff image/bmp image/vnd.adobe.photoshop image/vnd.microsoft.icon application/pdf)
3.16.9 config.active_storage.queues.analysis

接受 symbol 指示用於分析作業的 Active Job 佇列。當此選項為 nil 時,分析作業將傳送到預設的 Active Job 佇列(請參閱 config.active_job.default_queue_name)。

config.active_storage.queues.analysis = :low_priority
3.16.10 config.active_storage.queues.purge

接受 symbol 指示用於清除作業的 Active Job 佇列。當此選項為 nil 時,清除作業將傳送到預設的 Active Job 佇列(請參閱 config.active_job.default_queue_name)。

config.active_storage.queues.purge = :low_priority
3.16.11 config.active_storage.queues.mirror

接受 symbol 指示用於直接上傳映象作業的 Active Job 佇列。當此選項為 nil 時,映象作業將傳送到預設的 Active Job 佇列(請參閱 config.active_job.default_queue_name)。預設值為 nil

config.active_storage.queues.mirror = :low_priority
3.16.12 config.active_storage.logger

可用於設定 Active Storage 使用的記錄器。接受符合 Log4r 介面或預設 Ruby Logger 類的記錄器。

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

確定由以下產生的 URL 的預設到期時間:

  • ActiveStorage::Blob#url
  • ActiveStorage::Blob#service_url_for_direct_upload
  • ActiveStorage::Variant#url

預設值為 5 分鐘。

3.16.14 config.active_storage.urls_expire_in

確定由 Active Storage 產生的 Rails 應用程式中 URL 的預設到期時間。預設值為 nil。

3.16.15 config.active_storage.routes_prefix

可用於為 Active Storage 服務的路由設定路由字首。接受將附加到產生的路由的字串。

config.active_storage.routes_prefix = '/files'

預設值為 /rails/active_storage

3.16.16 config.active_storage.replace_on_assign_to_many

確定分配給使用 has_many_attached 宣告的附件集合是否替換任何現有附件或附加到它們。預設值為 true

3.16.17 config.active_storage.track_variants

確定變體是否記錄在資料庫中。預設值為 true

3.16.18 config.active_storage.draw_routes

可用於切換 Active Storage 路由產生。預設值為 true

3.16.19 config.active_storage.resolve_model_to_route

可用於全域性更改 Active Storage 檔案的傳送方式。

允許的 values 是:

  • :rails_storage_redirect:重定向到簽名的短期服務 URL。
  • :rails_storage_proxy:透過下載代理檔案。

預設值為 :rails_storage_redirect

3.16.20 config.active_storage.video_preview_arguments

可用於改變 ffmpeg 產生影片 preview 影象的方式。

預設情況下,這被定義為:

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"
  1. select=eq(n\,0)+eq(key\,1)+gt(scene\,0.015):選擇第一個影片幀,加上keyframes,加上滿足場景變化閾值的幀。
  2. loop=loop=-1:size=2,trim=start_frame=1:要在沒有其他幀滿足條件時將第一個影片幀用作回退,請迴圈播放第一個(一個或)兩個選定的幀,然後丟棄第一個迴圈的幀。

3.17 設定 Action Text

3.17.1 config.action_text.attachment_tag_name

接受用於包裝附件的 HTML 標記的字串。預設為 "action-text-attachment"

3.18 config.load_defaults 的結果

config.load_defaults 設定新的預設值,包括傳遞的版本。這樣,例如,透過 6.0 也會從它之前的每個版本中獲取新的預設值。

3.18.1 對於“7.0”,以下為先前版本的預設值以及:
  • config.action_controller.raise_on_open_redirectstrue
  • config.action_view.button_to_generates_button_tagtrue
  • config.action_view.apply_stylesheet_media_defaultfalse
  • config.active_support.key_generator_hash_digest_classOpenSSL::Digest::SHA256
  • config.active_support.hash_digest_classOpenSSL::Digest::SHA256
  • config.active_support.cache_format_version7.0
  • config.active_support.remove_deprecated_time_with_zone_nametrue
  • config.action_dispatch.return_only_request_media_type_on_content_typefalse
  • config.action_controller.silence_disabled_session_errorsfalse
  • config.action_mailer.smtp_timeout5
  • 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_record.verify_foreign_keys_for_fixturestrue
  • config.active_storage.variant_processor:vips
3.18.2 對於 '6.1',預設為以下早期版本:
  • config.active_record.has_many_inversingtrue
  • config.active_record.legacy_connection_handlingfalse
  • config.active_storage.track_variantstrue
  • config.active_storage.queues.analysisnil
  • config.active_storage.queues.purgenil
  • config.action_mailbox.queues.incinerationnil
  • config.action_mailbox.queues.routingnil
  • config.action_mailer.deliver_later_queue_namenil
  • config.active_job.retry_jitter0.15
  • config.active_job.skip_after_callbacks_if_terminatedtrue
  • config.action_dispatch.cookies_same_site_protection:lax
  • config.action_dispatch.ssl_default_redirect_status = 308
  • ActiveSupport.utc_to_local_returns_utc_offset_timestrue
  • config.action_controller.urlsafe_csrf_tokenstrue
  • config.action_view.form_with_generates_remote_formsfalse
  • config.action_view.preload_links_headertrue
3.18.3 對於 '6.0',以下為先前版本的預設值以及:
  • config.autoloader:zeitwerk
  • config.action_view.default_enforce_utf8false
  • config.action_dispatch.use_cookies_with_metadatatrue
  • config.action_mailer.delivery_job"ActionMailer::MailDeliveryJob"
  • config.active_storage.queues.analysis:active_storage_analysis
  • config.active_storage.queues.purge:active_storage_purge
  • config.active_storage.replace_on_assign_to_manytrue
  • config.active_record.collection_cache_versioningtrue
3.18.4 對於 '5.2',預設為以下先前版本和:
  • config.active_record.cache_versioningtrue
  • config.action_dispatch.use_authenticated_cookie_encryptiontrue
  • config.active_support.use_authenticated_message_encryptiontrue
  • config.active_support.hash_digest_classOpenSSL::Digest::SHA1
  • config.action_controller.default_protect_from_forgerytrue
  • config.action_view.form_with_generates_idstrue
3.18.5 對於“5.1”,以下為先前版本的預設值以及:
  • config.assets.unknown_asset_fallbackfalse
  • config.action_view.form_with_generates_remote_formstrue
3.18.6 對於 '5.0',基線預設從下面開始:
  • config.action_controller.per_form_csrf_tokenstrue
  • config.action_controller.forgery_protection_origin_checktrue
  • ActiveSupport.to_time_preserves_timezonetrue
  • config.active_record.belongs_to_required_by_defaulttrue
  • config.ssl_options{ hsts: { subdomains: true } }
3.18.7 基線預設值:
  • config.action_controller.default_protect_from_forgeryfalse
  • config.action_controller.raise_on_open_redirectsfalse
  • config.action_controller.urlsafe_csrf_tokensfalse
  • config.action_dispatch.cookies_same_site_protectionnil
  • config.action_mailer.delivery_jobActionMailer::DeliveryJob
  • config.action_view.form_with_generates_idsfalse
  • config.action_view.preload_links_headernil
  • config.action_view.button_to_generates_button_tagfalse
  • config.action_view.apply_stylesheet_media_defaulttrue
  • config.active_job.retry_jitter0.0
  • config.active_job.skip_after_callbacks_if_terminatedfalse
  • config.action_mailbox.queues.incineration:action_mailbox_incineration
  • config.action_mailbox.queues.routing:action_mailbox_routing
  • config.action_mailer.deliver_later_queue_name:mailers
  • config.active_record.collection_cache_versioningfalse
  • config.active_record.cache_versioningfalse
  • config.active_record.has_many_inversingfalse
  • config.active_record.legacy_connection_handlingtrue
  • config.active_support.use_authenticated_message_encryptionfalse
  • config.active_support.hash_digest_classOpenSSL::Digest::MD5
  • config.active_support.key_generator_hash_digest_classOpenSSL::Digest::SHA1
  • config.active_support.cache_format_version6.1
  • config.action_dispatch.return_only_request_media_type_on_content_typetrue
  • ActiveSupport.utc_to_local_returns_utc_offset_timesfalse
  • config.action_mailer.smtp_timeoutnil
  • config.active_storage.video_preview_arguments"-y -vframes 1 -f image2"
  • config.active_storage.variant_processor:mini_magick

3.19 設定資料庫

幾乎每個 Rails 應用程式都會與資料庫互動。您可以透過設定環境變數 ENV['DATABASE_URL'] 或使用名為 config/database.yml 的設定檔案連線到資料庫。

使用 config/database.yml 檔案,您可以指定訪問資料庫所需的所有資訊:

development:
  adapter: postgresql
  database: blog_development
  pool: 5

這將使用 postgresql 介面卡連線到名為 blog_development 的資料庫。同樣的資訊可以儲存在 URL 中,並透過這樣的環境變數提供:

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

config/database.yml 檔案包含 Rails 可以在預設情況下執行的三種不同環境的部分:

  • 當您手動與應用程式互動時,development 環境用於您的開發/本地計算機。
  • 執行自動化測試時使用 test 環境。
  • production 環境用於部署您的應用程式以供全世界使用。

如果您願意,您可以在 config/database.yml 中手動指定一個 URL

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

config/database.yml 檔案可以包含 ERB 標籤 <%= %>。標籤中的任何內容都將被評估為 Ruby 程式碼。您可以使用它從環境變數中提取資料或執行計算以產生所需的連線資訊。

提示:您不必手動更新資料庫設定。如果檢視應用程式產生器的選項,您會看到其中一個選項名為 --database。此選項允許您從最常用的關係資料庫列表中選擇一個介面卡。您甚至可以重複執行產生器:cd .. && rails new blog --database=mysql。當您確認覆蓋 config/database.yml 檔案時,您的應用程式將設定為 MySQL 而不是 SQLite。常見資料庫連線的詳細示例如下。

3.20 連線首選項

由於有兩種方法可以設定您的連線(使用 config/database.yml 或使用環境變數),因此瞭解它們如何互動非常重要。

如果您有一個空的 config/database.yml 檔案但您的 ENV['DATABASE_URL'] 存在,那麼 Rails 將透過您的環境變數連線到資料庫:

$ cat config/database.yml

$ echo $DATABASE_URL
postgresql://localhost/my_database

如果您有 config/database.yml 但沒有 ENV['DATABASE_URL'],則此檔案將用於連線到您的資料庫:

$ cat config/database.yml
development:
  adapter: postgresql
  database: my_database
  host: localhost

$ echo $DATABASE_URL

如果您同時設定了 config/database.ymlENV['DATABASE_URL'],則 Rails 會將設定合併在一起。為了更好地理解這一點,我們必須看一些例子。

當提供重複的連線資訊時,環境變數將優先:

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

$ echo $DATABASE_URL
postgresql://localhost/my_database

$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<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">
  ]

此處介面卡、主機和資料庫與 ENV['DATABASE_URL'] 中的資訊匹配。

如果提供非重複資訊,您將獲得所有唯一的 values,在任何衝突的情況下,環境變數仍然優先。

$ 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">
  ]

由於池不在 ENV['DATABASE_URL'] 提供的連線資訊中,它的資訊被合併。由於 adapter 是重複的,因此 ENV['DATABASE_URL'] 連線資訊獲勝。

顯式不使用 ENV['DATABASE_URL'] 中的連線資訊的唯一方法是使用 "url" 子 key 指定顯式 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">
  ]

這裡忽略了 ENV['DATABASE_URL'] 中的連線資訊,注意不同的介面卡和資料庫名稱。

由於可以在您的 config/database.yml 中嵌入 ERB,因此最好明確表明您正在使用 ENV['DATABASE_URL'] 連線到您的資料庫。這在生產中特別有用,因為您不應將資料庫密碼之類的機密提交到原始碼控制(例如 Git)中。

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

現在行為很清楚,我們只使用 ENV['DATABASE_URL'] 中的連線資訊。

3.20.1 設定 SQLite3 資料庫

Rails 內建了對 SQLite3 的支援,這是一個輕量級的無伺服器資料庫應用程式。雖然繁忙的生產環境可能會使 SQLite 過載,但它適用於開發和測試。 Rails 在建立新專案時預設使用 SQLite 資料庫,但您可以隨時更改它。

以下是包含開發環境連線資訊的預設設定檔案 (config/database.yml) 部分:

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

Rails 預設使用 SQLite3 資料庫進行資料儲存,因為它是一個剛好工作的零設定資料庫。 Rails 還支援 MySQL(包括 MariaDB)和 PostgreSQL“開箱即用”,並且有許多資料庫系統的外掛。如果您在生產環境中使用資料庫 Rails 很可能有一個介面卡。

3.20.2 設定 MySQL 或 MariaDB 資料庫

如果您選擇使用 MySQL 或 MariaDB 而不是附帶的 SQLite3 資料庫,您的 config/database.yml 看起來會有些不同。下面是開發部分:

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

如果你的開發資料庫有一個密碼為空的 root 使用者,這個設定應該適合你。否則,根據需要更改 development 部分中的使用者名稱和密碼。

如果您的 MySQL 版本是 5.5 或 5.6 並且希望預設使用 utf8mb4 字符集,請透過啟用 innodb_large_prefix 系統變數來設定您的 MySQL 伺服器以支援更長的 key 字首。

建議鎖在 MySQL 上預設啟用,用於使資料庫 migrations 平行計算安全。您可以透過將 advisory_locks 設定為 false 來禁用諮詢鎖:

production:
  adapter: mysql2
  advisory_locks: false
3.20.3 設定PostgreSQL資料庫

如果您選擇使用 PostgreSQL,您的 config/database.yml 將被自定義為使用 PostgreSQL 資料庫:

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

預設情況下,Active Record 使用準備好的語句和諮詢鎖等資料庫功能。如果您使用像 PgBouncer 這樣的外部連線池,您可能需要禁用這些功能:

production:
  adapter: postgresql
  prepared_statements: false
  advisory_locks: false

如果啟用,預設情況下,Active Record 將為每個資料庫連線建立最多 1000 準備好的語句。要修改此行為,您可以將 statement_limit 設定為不同的 value:

production:
  adapter: postgresql
  statement_limit: 200

使用的準備語句越多:資料庫需要的記憶體就越多。如果您的 PostgreSQL 資料庫達到記憶體限制,請嘗試降低 statement_limit 或禁用準備好的語句。

3.20.4 為JRuby平臺設定SQLite3資料庫

如果您選擇使用 SQLite3 並使用 JRuby,則您的 config/database.yml 看起來會有些不同。下面是開發部分:

development:
  adapter: jdbcsqlite3
  database: db/development.sqlite3
3.20.5 為 JRuby 平臺設定 MySQL 或 MariaDB 資料庫

如果您選擇使用 MySQL 或 MariaDB 並使用 JRuby,則您的 config/database.yml 看起來會有些不同。下面是開發部分:

development:
  adapter: jdbcmysql
  database: blog_development
  username: root
  password:
3.20.6 為JRuby平臺設定PostgreSQL資料庫

如果您選擇使用 PostgreSQL 並且正在使用 JRuby,那麼您的 config/database.yml 看起來會有些不同。下面是開發部分:

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

根據需要更改 development 部分中的使用者名稱和密碼。

3.20.7 設定元資料儲存

預設情況下,Rails 將儲存有關您的 Rails 環境和架構的資訊 在名為 ar_internal_metadata 的內部表中。

要按連線關閉此功能,請在您的資料庫中設定 use_metadata_table 設定。這在使用共享資料庫和/或 無法建立表的資料庫使用者。

development:
  adapter: postgresql
  use_metadata_table: false

3.21 建立 Rails 環境

預設情況下,Rails 附帶三個環境:“開發”、“測試”和“生產”。雖然這些對於大多數用例來說已經足夠了,但在某些情況下,您需要更多環境。

假設您有一臺伺服器,它反映了生產環境但僅用於測試。這種伺服器通常稱為“登臺伺服器”。要為此伺服器定義一個名為“staging”的環境,只需建立一個名為 config/environments/staging.rb 的檔案。請使用 config/environments 中任何現有檔案的內容作為起點,並從那裡進行必要的更改。

該環境與預設環境沒有什麼不同,使用 bin/rails server -e staging 啟動伺服器,使用 bin/rails console -e staging 啟動控制檯,Rails.env.staging? 工作等。

3.22 部署到子目錄(相對 URL 根)

預設情況下,Rails 期望您的應用程式在根目錄下執行 (例如 /)。本節說明如何在目錄中執行您的應用程式。

假設我們要將應用程式部署到“/app1”。 Rails 需要知道 此目錄產生適當的路由:

config.relative_url_root = "/app1"

或者你可以設定 RAILS_RELATIVE_URL_ROOT 環境 多變的。

Rails 現在將在產生連結時新增“/app1”。

3.22.1 使用乘客

乘客可以輕鬆地在子目錄中執行您的應用程式。您可以在乘客手冊 中找到相關設定。

3.22.2 使用反向代理

與傳統部署相比,使用反向代理部署應用程式具有明顯的優勢。它們允許您透過對應用程式所需的元件進行分層來更好地控制伺服器。

許多現代 Web 伺服器可以用作代理伺服器來平衡第三方元素,例如快取伺服器或應用程式伺服器。

您可以使用的一種這樣的應用程式伺服器是 Unicorn,它在反向代理之後執行。

在這種情況下,您需要設定代理伺服器(NGINX、Apache 等)以接受來自應用程式伺服器(Unicorn)的連線。預設情況下,Unicorn 將在埠 8080 上偵聽 TCP 連線,但您可以更改埠或將其設定為使用 sockets。

你可以在獨角獸自述中找到更多資訊,瞭解其背後的哲學

一旦您設定了應用程式伺服器,您必須透過適當地設定您的 Web 伺服器來將請求代理給它。例如,您的 NGINX 設定可能包括:

upstream application_server {
  server 0.0.0.0:8080;
}

server {
  listen 80;
  server_name localhost;

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

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

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

  # some other configuration
}

請務必閱讀 NGINX 文件 以獲取最新資訊。

4 Rails 環境設定

Rails 的某些部分也可以透過提供環境變數在外部進行設定。以下環境變數被 Rails 的各個部分識別:

  • ENV["RAILS_ENV"] 定義了 Rails 將在其下執行的 Rails 環境(生產、開發、測試等)。

  • 當您將應用程式部署到子目錄 時,路由程式碼使用 ENV["RAILS_RELATIVE_URL_ROOT"] 來識別 URL。

  • ENV["RAILS_CACHE_ID"]ENV["RAILS_APP_VERSION"]用於在Rails'快取程式碼中產生擴充套件快取keys。這允許您從同一應用程式擁有多個單獨的快取。

5 使用初始化檔案

在您的應用程式中載入框架和任何 gems 後,Rails 變為 載入初始化程式。初始化程式是儲存在下面的任何 Ruby 檔案 config/initializers 在您的應用程式中。您可以使用初始化程式來儲存 應該在所有框架和 gems 之後進行的設定設定 載入,例如為這些部分設定設定的選項。

config/initializers 中的檔案(以及 config/initializers) 被一一排序並載入為 load_config_initializers 初始值設定項。

如果一個初始化器的程式碼依賴於另一個初始化器中的程式碼,你可以 將它們組合成一個初始值設定項。這使得依賴更多 明確的,並且可以幫助在您的應用程式中展示新概念。 Rails 也 支援初始化檔名​​的編號,但這可能導致檔名 攪拌。不推薦使用 require 顯式載入初始化程式,因為 它會導致初始化程式被載入兩次。

不能保證您的初始化程式會在所有 gem 之後執行 初始化程式,因此任何依賴於給定 gem 的初始化程式碼都已 初始化應該進入 config.after_initialize 塊。

6 初始化事件

Rails 有 5 個可以掛鉤的初始化事件(按執行順序列出):

  • before_configuration:一旦應用程式常量從 Rails::Application 繼承,它就會執行。 config 呼叫在這發生之前被評估。

  • before_initialize:這是在應用程式的初始化過程發生之前直接執行的,在 Rails 初始化過程的開始附近使用 :bootstrap_hook 初始化程式。

  • to_prepare:在為所有 Railties(包括應用程式本身)執行初始化程式之後,但在急切載入和構建中介軟體堆疊之前執行。更重要的是,將在 development 中的每個程式碼重新載入時執行,但在 productiontest 中僅執行一次(在啟動期間)。

  • before_eager_load:這是在發生急切載入之前直接執行的,這是 production 環境的預設行為,而不是 development 環境的預設行為。

  • after_initialize:在應用程式初始化後直接執行,在config/initializers中的應用程式初始化器執行後。

要為這些掛載機制定義事件,請使用 Rails::ApplicationRails::RailtieRails::Engine 子類中的塊語法:

module YourApp
  class Application < Rails::Application
    config.before_initialize do
      # initialization code goes here
    end
  end
end

或者,您也可以透過 Rails.application 物件上的 config 方法來完成:

Rails.application.config.before_initialize do
  # initialization code goes here
end

應用程式的某些部分,尤其是路由,在呼叫 after_initialize 塊時尚未設定。

6.1 Rails::Railtie#initializer

Rails 有幾個在啟動時執行的初始化器,它們都是使用來自 Action Controller 的 initializer 方法定義的。這是來自 Action Controller 的 set_helpers_path 初始化程式的示例:

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

initializer 方法接受三個引數,第一個是初始化器的名稱,第二個是選項雜湊(此處未顯示),第三個是塊。可以指定options hash中的:before key來指定這個新初始化器必須在哪個初始化器之前執行,而:after key將指定after執行這個初始化器的哪個初始化器。

使用 initializer 方法定義的初始化程式將按照它們定義的順序執行,但使用 :before:after 方法的初始化程式除外。

你可以把你的初始化器放在鏈中任何其他初始化器之前或之後,只要它是合乎邏輯的。假設您有 4 個稱為“一”到“四”(按該順序定義)的初始值設定項,並且您將“四”定義為 before“二”但 after“三”,這不合邏輯,Rails 將無法確定您的初始化順序。

initializer 方法的塊引數是應用程式本身的實例,因此我們可以使用示例中的 config 方法訪問其上的設定。

由於 Rails::Application 繼承自 Rails::Railtie(間接),您可以使用 config/application.rb 中的 initializer 方法為應用程式定義初始化程式。

6.2 初始化器

下面是按照定義順序在 Rails 中找到的所有初始化器的完整列表(因此執行,除非另有說明)。

  • load_environment_hook:用作佔位符,以便可以定義 :load_environment_config 在它之前執行。

  • load_active_support:需要為 Active Support 設定基礎的 active_support/dependencies。如果 config.active_support.bare 不真實,則可選地需要 active_support/all,這是預設設定。

  • initialize_logger:為應用程式初始化記錄器(一個 ActiveSupport::Logger 物件)並使其在 Rails.logger 處可訪問,前提是在此點之前沒有插入初始化器已定義 Rails.logger

  • initialize_cache:如果尚未設定 Rails.cache,則透過引用 config.cache_store 中的 value 來初始化快取並將結果儲存為 Rails.cache。如果這個物件回應了 middleware 方法,它的中介軟體就插入到中介軟體棧中的 ActionDispatch::Executor 之後。

  • set_clear_dependencies_hook:這個初始值設定項 - 僅在 cache_classes 設定為 false 時執行 - 使用 ActionDispatch::Callbacks.after 從物件空間中刪除在請求期間引用的常量,以便它們將在以下請求期間重新載入。

  • bootstrap_hook:執行所有設定的 before_initialize 塊。

  • i18n.callbacks:在開發環境中,設定一個 to_prepare callback 如果自上次請求以來任何語言環境發生變化,它將呼叫 I18n.reload!。在生產中,這個 callback 只會在第一個請求上執行。

  • active_support.deprecation_behavior:設定環境棄用報告,開發預設為:log,生產預設為:silence,測試預設為:stderr。可以設定為 values 的陣列。這個初始化器還為不允許的棄用設定了行為,預設為 :raise 用於開發和測試,預設為 :silence 用於生產。不允許的棄用警告預設為空陣列。

  • active_support.initialize_time_zone:根據config.time_zone設定為應用程式設定預設時區,預設為“UTC”。

  • active_support.initialize_beginning_of_week:根據config.beginning_of_week設定為應用程式設定預設的一週開始,預設為:monday

  • active_support.set_configs:透過使用 config.active_support 中的設定透過 send 將方法名稱作為 ActiveSupport 的 setter 並傳遞 values 來設定 Active Support。

  • action_dispatch.configure:將ActionDispatch::Http::URL.tld_length設定為config.action_dispatch.tld_length的value。

  • action_view.set_configs:透過使用 config.action_view 中的設定,透過 send 將方法名稱作為 ActionView::Base 的 setter 並傳遞 values 來設定 Action View。

  • action_controller.assets_config:如果未明確設定,則將 config.action_controller.assets_dir 初始化到應用程式的公共目錄。

  • action_controller.set_helpers_path:將 Action Controller 的 Action Controller 設定為應用程式的 Action Controller。

  • action_controller.parameters_config:為ActionController::Parameters設定強引數選項。

  • action_controller.set_configs:透過使用 Action Controller 中的設定,透過 send 將方法名稱作為 ActionController::Base 的 setter 並傳遞 values 來設定 Action Controller。

  • action_controller.compile_config_methods:為指定的設定設定初始化方法,以便更快地訪問它們。

  • active_record.initialize_timezone:將 ActiveRecord::Base.time_zone_aware_attributes 設定為 true,並將 ActiveRecord::Base.default_timezone 設定為 UTC。當從資料庫中讀取屬性時,它們將轉換為 Time.zone 指定的時區。

  • active_record.logger:設定 ActiveRecord::Base.logger - 如果尚未設定 - 為 Rails.logger

  • active_record.migration_error:設定中介軟體以檢查掛起的 migrations。

  • active_record.check_schema_cache_dump:如果已設定且可用,則載入架構快取轉儲。

  • active_record.warn_on_records_fetched_greater_than:當查詢返回大量記錄時啟用警告。

  • active_record.set_configs:透過使用 config.active_record 中的設定,透過 send 將方法名稱作為 ActiveRecord::Base 的 setter 並傳遞 values 來設定 Active Record。

  • active_record.initialize_database:從config/database.yml載入資料庫設定(預設)併為當前環境建立連線。

  • active_record.log_runtime:包括 ActiveRecord::Railties::ControllerRuntime,它負責將 Active Record 呼叫所花費的時間報告給記錄器。

  • active_record.set_reloader_hooks:如果 config.cache_classes 設定為 false,則重置​​與資料庫的所有可重新載入的連線。

  • active_record.add_watchable_files:將 schema.rbstructure.sql 檔案新增到可觀看檔案中。

  • active_job.logger:設定 ActiveJob::Base.logger - 如果尚未設定 - 到 Rails.logger

  • active_job.set_configs:透過使用 config.active_job 中的設定,透過 send 將方法名稱作為 ActiveJob::Base 的 setter 並傳遞 values 來設定 Active Job。

  • action_mailer.logger:設定 ActionMailer::Base.logger - 如果尚未設定 - 為 Rails.logger

  • action_mailer.set_configs:透過使用 config.action_mailer 中的設定,透過 send 將方法名稱作為 Action Mailer 的 setter 並傳遞 values 來設定 Action Mailer。

  • action_mailer.compile_config_methods:為指定的設定設定初始化方法,以便更快地訪問它們。

  • set_load_path:這個初始化器在 bootstrap_hook 之前執行。將 config.load_paths 指定的路徑和所有自動載入路徑新增到 $LOAD_PATH

  • set_autoload_paths:這個初始化器在 bootstrap_hook 之前執行。將 app 的所有子目錄和 config.autoload_pathsconfig.eager_load_pathsconfig.autoload_once_paths 指定的路徑新增到 ActiveSupport::Dependencies.autoload_paths

  • add_routing_paths:載入(預設情況下)所有 config/routes.rb 檔案(在應用程式和 railties 中,包括引擎)併為應用程式設定路由。

  • add_locales:將 config/locales 中的檔案(來自應用程式、railties 和引擎)新增到 I18n.load_path,使這些檔案中的翻譯可用。

  • add_view_paths:將應用程式中的目錄app/views、railties和引擎新增到應用程式的view檔案的查詢路徑中。

  • load_environment_config:為當前環境載入 config/environments 檔案。

  • prepend_helpers_path:將應用程式中的目錄app/helpers、railties和引擎新增到應用程式的helpers的查詢路徑中。

  • load_config_initializers:從應用程式中的 config/initializers、railties 和引擎載入所有 Ruby 檔案。此目錄中的檔案可用於儲存所有框架載入後應進行的設定設定。

  • engines_blank_point:如果您希望在載入引擎之前執行任何操作,則提供一個初始化點。此後,所有 railtie 和引擎初始化程式都將執行。

  • add_generator_templates:在 lib/templates 為應用程式、railties 和引擎查詢產生器的模板,並將這些新增到 config.generators.templates 設定中,這將使模板可供所有產生器參考。

  • ensure_autoload_once_paths_as_subset:確保 config.autoload_once_paths 只包含來自 config.autoload_paths 的路徑。如果它包含額外的路徑,則會引發異常。

  • add_to_prepare_blocks:應用程式中每個 config.to_prepare 呼叫的塊、一個 railtie 或引擎被新增到 to_prepare callbacks for Action 排程中,它將在開發中的每個請求或在生產中的第一個請求之前執行。

  • add_builtin_route:如果應用程式在開發環境下執行,那麼這會將 rails/info/properties 的路由附加到應用程式路由。該路由在預設的 Rails 應用程式中提供了 public/index.html 的詳細資訊,例如 Rails 和 Ruby 版本。

  • build_middleware_stack:為應用程式構建中介軟體堆疊,返回一個物件,該物件具有 call 方法,該方法為請求採用 Rack 環境物件。

  • eager_load!:如果 config.eager_loadtrue,則執行 config.before_eager_load 掛載機制,然後呼叫 eager_load! 它將載入所有 config.eager_load_namespaces

  • finisher_hook:為應用程式的程序初始化完成後提供一個掛載機制,以及為應用程式、railties和引擎執行所有的config.after_initialize塊。

  • set_routes_reloader_hook:設定 Action Dispatch 以使用 ActiveSupport::Callbacks.to_run 重新載入路由檔案。

  • disable_dependency_loading:如果 config.eager_load 設定為 true,則禁用自動依賴載入。

7 資料庫池

Active Record 資料庫連線由 ActiveRecord::ConnectionAdapters::ConnectionPool 管理,它確保連線池將執行緒訪問量同步到有限數量的資料庫連線。此限制預設為 5,可以在 database.yml 中設定。

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

由於預設情況下連線池在 Active Record 內部處理,因此所有應用程式伺服器(Thin、Puma、Unicorn 等)應該表現相同。資料庫連線池最初是空的。隨著連線需求的增加,它將建立它們,直到達到連線池限制。

任何一個請求都會在第一次需要訪問資料庫時檢出連線。在請求結束時,它將重新檢查連線。這意味著額外的連線槽將再次可用於佇列中的下一個請求。

如果您嘗試使用的連線數超過可用連線數,Active Record 將阻止 你並等待來自池的連線。如果它無法獲得連線,一個 將丟擲類似於下面給出的超時錯誤。

ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)

如果出現上述錯誤,則可能需要增加 透過增加 database.yml 中的 pool 選項來建立連線池

筆記。如果您在多執行緒環境中執行,則多個執行緒可能同時訪問多個連線。因此,根據您當前的請求負載,您很可能會有多個執行緒爭用有限數量的連線。

8 自定義設定

您可以透過 Rails 設定物件設定自己的程式碼 自定義設定在 config.x 名稱空間下,或直接在 config 下。 這兩者之間的 key 差別在於,如果您應該使用 config.x 正在定義 nested 設定(例如:config.x.nested.hi),並且只是 config 用於 single level 設定(例如:config.hello)。

config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries  = 3
config.super_debugger = true

然後可以透過設定物件使用這些設定點:

Rails.configuration.x.payment_processing.schedule # => :daily
Rails.configuration.x.payment_processing.retries  # => 3
Rails.configuration.x.payment_processing.not_set  # => nil
Rails.configuration.super_debugger                # => true

您還可以使用 Rails::Application.config_for 載入整個設定檔案:

# config/payment.yml
production:
  environment: production
  merchant_id: production_merchant_id
  public_key:  production_public_key
  private_key: production_private_key

development:
  environment: sandbox
  merchant_id: development_merchant_id
  public_key:  development_public_key
  private_key: development_private_key
# 設定/應用程式.rb
module MyApp
  class Application < Rails::Application
    config.payment = config_for(:payment)
  end
end
Rails.configuration.payment['merchant_id'] # => production_merchant_id or development_merchant_id

Rails::Application.config_for 支援一個 shared 設定來分組公共 設定。共享設定將合併到環境中 設定。

# 設定/example.yml
shared:
  foo:
    bar:
      baz: 1

development:
  foo:
    bar:
      qux: 2
# 開發環境
Rails.application.config_for(:example)[:foo][:bar] #=> { baz: 1, qux: 2 }

9 搜尋引擎索引

有時,您可能希望阻止應用程式的某些頁面可見 在 Google、Bing、Yahoo 或 Duck Duck Go 等搜尋網站上。索引的機器人 這些站點會首先分析 http://your-site.com/robots.txt 檔案以 知道允許索引哪些頁面。

Rails 在 /public 資料夾中為您建立此檔案。預設情況下,它允許 搜尋引擎來索引應用程式的所有頁面。如果你想阻止 在應用程式的所有頁面上建立索引,請使用:

User-agent: *
Disallow: /

要僅阻止特定頁面,有必要使用更復雜的語法。學習 它在 官方文件 上。

10 事件檔案系統監視器

如果載入了 listen gem Rails 使用 事件檔案系統監視器以檢測 config.cache_classes 時的更改 false

group :development do
  gem 'listen', '~> 3.3'
end

否則,在每個請求中 Rails 遍歷應用程式樹以檢查是否 什麼都變了。

在 Linux 和 macOS 上不需要額外的 gems,但需要一些 對於*BSDWindows

請注意,某些設定不受支援

回饋

我們鼓勵您幫助提高本指南的品質。

如果您發現任何拼寫錯誤或資訊錯誤,請提供回饋。 要開始回饋,您可以閱讀我們的 回饋 部分。

您還可能會發現不完整的內容或不是最新的內容。 請務必為 main 新增任何遺漏的文件。假設是 非穩定版指南(edge guides) 請先驗證問題是否已經在主分支上解決。 請前往 Ruby on Rails 指南寫作準則 查看寫作風格和慣例。

如果由於某種原因您發現要修復的內容但無法自行修補,請您 提出 issue

關於 Ruby on Rails 的任何類型的討論歡迎提供任何文件至 rubyonrails-docs 討論區