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::Engine
或 Rails::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_classes
是 false
,則相關,這是開發環境中的預設值。否則,所有自動載入只發生一次。此陣列的所有元素也必須在 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_change
為true
時用於檢測檔案系統中檔案更新的類。 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_classes
是 true
,則忽略此選項。
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
,它們分別需要使用 terser
、closure-compiler
、uglifier
或 yui-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.css
和 application.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_controller
與resource_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
型別的條目,
Proc
和 IPAddr
僅舉幾例。這是一個帶有正則表示式的示例。
# 允許來自子域的請求,例如 `www.product.com` 和
# `beta1.product.com`。
Rails.application.config.hosts << /.*\.product\.com/
提供的正則表示式將被兩個錨點(\A
和 \z
)包裹,因此它
必須匹配整個主機名。 /product.com/
,例如,一旦錨定,
將無法匹配 www.product.com
。
支援一種特殊情況,允許您允許所有子域:
# 允許來自子域的請求,例如 `www.product.com` 和
# `beta1.product.com`。
Rails.application.config.hosts << ".product.com"
您可以透過設定從主機授權檢查中排除某些請求
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.enabled
是 false
,則禁用。如果您需要提供未命名為 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_concurrency
是 false
,則禁用,這會導致載入 Rack::Lock
。 Rack::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_check
和 config.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 上的 create
和 update
操作進行時間戳記。預設的 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.rb
或 db/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_to
到 has_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。如果 true
,UsersHelper
方法隨處可用。預設設定行為(當此選項未明確設定為 true
或 false
時)是所有檢視 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 -
:log
在unpermitted_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'
。
3.9.8 config.action_dispatch.signed_cookie_salt
設定有符號的 cookies 鹽 value。
預設為 'signed cookie'
。
3.9.9 config.action_dispatch.encrypted_cookie_salt
設定加密的 cookies 鹽 value。預設為 'encrypted cookie'
。
3.9.10 config.action_dispatch.encrypted_signed_cookie_salt
設定已簽名的加密 cookies 鹽 value。預設為“簽名加密” cookie'`。
3.9.11 config.action_dispatch.authenticated_encrypted_cookie_salt
設定經過身份驗證的加密 cookie 鹽。預設為“已認證” 加密的 cookie'`。
3.9.12 config.action_dispatch.encrypted_cookie_cipher
設定用於加密 cookies 的密碼。這預設為
"aes-256-gcm"
。
3.9.13 config.action_dispatch.signed_cookie_digest
設定用於簽名的 cookies 的摘要。預設為 "SHA1"
。
3.9.14 config.action_dispatch.cookies_rotations
允許輪換加密和簽名的 cookies 的秘密、密碼和摘要。
3.9.15 config.action_dispatch.use_authenticated_cookie_encryption
控制簽名和加密的 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
。
3.10.16 config.action_view.preload_links_header
確定 javascript_include_tag
和 stylesheet_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_NONE
或OpenSSL::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 預設值。用於為每個郵件程式設定諸如 from
或 reply_to
之類的選項。這些預設為:
mime_version: "1.0",
charset: "UTF-8",
content_type: "text/plain",
parts_order: ["text/plain", "text/enriched", "text/html"]
分配雜湊以設定其他選項:
config.action_mailer.default_options = {
from: "noreply@example.com"
}
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.1
和 7.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]
PopplerPDFPreviewer
和 MuPDFPreviewer
可以從 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 格式的情況下處理變體。
如果您想在您的應用程式中使用 WebP
或 AVIF
變體,您可以新增
image/webp
或 image/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"
-
select=eq(n\,0)+eq(key\,1)+gt(scene\,0.015)
:選擇第一個影片幀,加上keyframes,加上滿足場景變化閾值的幀。 -
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_redirects
:true
-
config.action_view.button_to_generates_button_tag
:true
-
config.action_view.apply_stylesheet_media_default
:false
-
config.active_support.key_generator_hash_digest_class
:OpenSSL::Digest::SHA256
-
config.active_support.hash_digest_class
:OpenSSL::Digest::SHA256
-
config.active_support.cache_format_version
:7.0
-
config.active_support.remove_deprecated_time_with_zone_name
:true
-
config.action_dispatch.return_only_request_media_type_on_content_type
:false
-
config.action_controller.silence_disabled_session_errors
:false
-
config.action_mailer.smtp_timeout
:5
-
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_fixtures
:true
-
config.active_storage.variant_processor
::vips
3.18.2 對於 '6.1',預設為以下早期版本:
-
config.active_record.has_many_inversing
:true
-
config.active_record.legacy_connection_handling
:false
-
config.active_storage.track_variants
:true
-
config.active_storage.queues.analysis
:nil
-
config.active_storage.queues.purge
:nil
-
config.action_mailbox.queues.incineration
:nil
-
config.action_mailbox.queues.routing
:nil
-
config.action_mailer.deliver_later_queue_name
:nil
-
config.active_job.retry_jitter
:0.15
-
config.active_job.skip_after_callbacks_if_terminated
:true
-
config.action_dispatch.cookies_same_site_protection
::lax
-
config.action_dispatch.ssl_default_redirect_status
=308
-
ActiveSupport.utc_to_local_returns_utc_offset_times
:true
-
config.action_controller.urlsafe_csrf_tokens
:true
-
config.action_view.form_with_generates_remote_forms
:false
-
config.action_view.preload_links_header
:true
3.18.3 對於 '6.0',以下為先前版本的預設值以及:
-
config.autoloader
::zeitwerk
-
config.action_view.default_enforce_utf8
:false
-
config.action_dispatch.use_cookies_with_metadata
:true
-
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_many
:true
-
config.active_record.collection_cache_versioning
:true
3.18.4 對於 '5.2',預設為以下先前版本和:
-
config.active_record.cache_versioning
:true
-
config.action_dispatch.use_authenticated_cookie_encryption
:true
-
config.active_support.use_authenticated_message_encryption
:true
-
config.active_support.hash_digest_class
:OpenSSL::Digest::SHA1
-
config.action_controller.default_protect_from_forgery
:true
-
config.action_view.form_with_generates_ids
:true
3.18.5 對於“5.1”,以下為先前版本的預設值以及:
-
config.assets.unknown_asset_fallback
:false
-
config.action_view.form_with_generates_remote_forms
:true
3.18.6 對於 '5.0',基線預設從下面開始:
-
config.action_controller.per_form_csrf_tokens
:true
-
config.action_controller.forgery_protection_origin_check
:true
-
ActiveSupport.to_time_preserves_timezone
:true
-
config.active_record.belongs_to_required_by_default
:true
-
config.ssl_options
:{ hsts: { subdomains: true } }
3.18.7 基線預設值:
-
config.action_controller.default_protect_from_forgery
:false
-
config.action_controller.raise_on_open_redirects
:false
-
config.action_controller.urlsafe_csrf_tokens
:false
-
config.action_dispatch.cookies_same_site_protection
:nil
-
config.action_mailer.delivery_job
:ActionMailer::DeliveryJob
-
config.action_view.form_with_generates_ids
:false
-
config.action_view.preload_links_header
:nil
-
config.action_view.button_to_generates_button_tag
:false
-
config.action_view.apply_stylesheet_media_default
:true
-
config.active_job.retry_jitter
:0.0
-
config.active_job.skip_after_callbacks_if_terminated
:false
-
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_versioning
:false
-
config.active_record.cache_versioning
:false
-
config.active_record.has_many_inversing
:false
-
config.active_record.legacy_connection_handling
:true
-
config.active_support.use_authenticated_message_encryption
:false
-
config.active_support.hash_digest_class
:OpenSSL::Digest::MD5
-
config.active_support.key_generator_hash_digest_class
:OpenSSL::Digest::SHA1
-
config.active_support.cache_format_version
:6.1
-
config.action_dispatch.return_only_request_media_type_on_content_type
:true
-
ActiveSupport.utc_to_local_returns_utc_offset_times
:false
-
config.action_mailer.smtp_timeout
:nil
-
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.yml
和 ENV['DATABASE_URL']
,則 Rails 會將設定合併在一起。為了更好地理解這一點,我們必須看一些例子。
當提供重複的連線資訊時,環境變數將優先:
$ cat config/database.yml
development:
adapter: sqlite3
database: NOT_my_database
host: localhost
$ echo $DATABASE_URL
postgresql://localhost/my_database
$ bin/rails runner 'puts ActiveRecord::Base.configurations'
#<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
中的每個程式碼重新載入時執行,但在production
和test
中僅執行一次(在啟動期間)。before_eager_load
:這是在發生急切載入之前直接執行的,這是production
環境的預設行為,而不是development
環境的預設行為。after_initialize
:在應用程式初始化後直接執行,在config/initializers
中的應用程式初始化器執行後。
要為這些掛載機制定義事件,請使用 Rails::Application
、Rails::Railtie
或 Rails::Engine
子類中的塊語法:
module YourApp
class Application < Rails::Application
config.before_initialize do
# 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.rb
和structure.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_paths
、config.eager_load_paths
和config.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_load
是true
,則執行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,但需要一些 對於*BSD 和 Windows。
請注意,某些設定不受支援。
回饋
我們鼓勵您幫助提高本指南的品質。
如果您發現任何拼寫錯誤或資訊錯誤,請提供回饋。 要開始回饋,您可以閱讀我們的 回饋 部分。
您還可能會發現不完整的內容或不是最新的內容。 請務必為 main 新增任何遺漏的文件。假設是 非穩定版指南(edge guides) 請先驗證問題是否已經在主分支上解決。 請前往 Ruby on Rails 指南寫作準則 查看寫作風格和慣例。
如果由於某種原因您發現要修復的內容但無法自行修補,請您 提出 issue。
關於 Ruby on Rails 的任何類型的討論歡迎提供任何文件至 rubyonrails-docs 討論區。