日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

配置 Rails 应用程序

發(fā)布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 配置 Rails 应用程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個指南涵蓋了 Rails 應(yīng)用程序的配置和初始化設(shè)置.通過瀏覽這個指南,你將能:

  • 調(diào)整 Rails 應(yīng)用程序的運作
  • 附加程序啟動時運行的代碼

endprologue.

初始化代碼的位置

Rails 提供四個標(biāo)準(zhǔn)的位置初始化代碼

  • config/application.rb
  • 運行環(huán)境相關(guān)的配置文件
  • 各初始化程序
  • 后初始化程序(初始化完成后運行的程序)

先于Rails運行代碼

有時候你需要在 Rails 加載自己之前運行代碼, 將調(diào)用代碼放在?config/application.rb?文件的?require ‘rails/all’?之上.

配置 Rails 組件

一般而言, 配置 Rails 的工作其實就是配置 Rails 的各個組件, 就像配置 Rails 本身一樣. 配置文件+config/application.rb+ 和運行環(huán)境相關(guān)的配置文件(比如?config/environments/production.br) 可以讓你設(shè)定一些你想傳遞給所有組件的設(shè)置.

例如, 缺省的?config/application.rb?文件包括這個設(shè)置:

config.filter_parameters += [:password]

這是給 Rails 本身的設(shè)置. 如果你想向單個 Rails 組件傳遞設(shè)置, 你同樣可以在?config/application.rb?文件里通過同+config+對象做一樣的操作.

config.active_record.observers = [:hotel_observer, :review_observer]

Rails 將會使用那些特定的設(shè)置來配置 Active Record.

一般的Rails配置

這些配置方法都是由?Rails::Railtie?對象調(diào)用的,比如?Rails::Engine?或者?Rails::Application.

  • config.after_initialize?會接受一個代碼塊,這個代碼塊將會在 Rails 初始化應(yīng)用程序完畢_之后_再運行. 那包括框架自身, 引擎和在+config/initializers+里的所有應(yīng)用程序初始化程序的初始化.請注意這個代碼塊_將會_為rake任務(wù)運行. 在給其它初始化程序進行配置時會很有用:

config.after_initialize do
ActionView::Base.sanitized_allowed_tags.delete ‘div’
end

  • config.allow_concurrency?應(yīng)該設(shè)置為 true 來處理同時運行(線程安全)的活動. False 為默認(rèn)值. 你也許不會想要直接調(diào)用它, 那是因為要做一系列其它的調(diào)整來讓線程安全模式良好的運行.也可以通過+threadsafe!+來激活.
  • config.asset_host?用于設(shè)置資源主機. 當(dāng)CDNs被使用于自己的資源主機,或者當(dāng)你想用不同的域名別名來解決瀏覽器內(nèi)建線程并發(fā)限制時會很有用.這是+config.action_controller.asset_host+ 的簡短版本
  • config.asset_path?讓你布置資源的路徑.可以是一個可調(diào)用的對象, 一個字符串,或者是默認(rèn)值+nil+. 例如, 通常+blog.js+ 的路徑會是?/javascript/blog.js, 假設(shè)其絕對路徑為?path. 如果?config.asset_path?可調(diào)用, Rails 在生成資源路徑的時候調(diào)用它,并向它投遞+path+參數(shù). 如果?config.asset_path?是個字符串, 它應(yīng)該是個帶有?%s?的?sprintf?格式的字符串,?path?會插入到?%s?的位置. 在任何情況下, Rails 輸出布置好的路徑. 這是?config.action_controller.asset_path簡短版本.

config.asset_path = proc { |path| “/blog/public#{path}” }

NOTE. 如果開啟了 asset pipeline,?config.asset_path?配置會被忽略. 默認(rèn)是開啟 asset pipeline.

  • config.autoload_once_paths?接受一個路徑數(shù)組, Rails將會自動加載這些路徑中的常量,所以這些常量就不會在每次請求時都被清除. 如果+config.cache_classes+是 false , 這個配置將會無效, 這在開發(fā)環(huán)境下是默認(rèn)的. 另外, 所有的自動加載都是發(fā)生一次. 數(shù)組里的所有元素必須同時在?autoload_paths?里。這默認(rèn)是空數(shù)組.
  • config.autoload_paths?接受一個路徑數(shù)組, Rails將會自動加載這些路徑著哦國內(nèi)的常量. 默認(rèn)是+app+目錄下的所有目錄.
  • config.action_view.cache_template_loading?控制模板是否每個請求都要重新加載. 默認(rèn)是?config.cache_classes?設(shè)置的任何值.
  • config.cache_store?配置Rails緩存要使用什么緩存存儲. 可選?:memory_store,?:file_store,?:mem_cache_store?其中一個, 有或者是實現(xiàn)了緩存API的一個對象.如果目錄?tmp/cache?存在則默認(rèn)是?:file_store, 否則是?:memory_store.
  • config.colorize_logging?指定記錄日志信息是否使用ANSI顏色碼.默認(rèn)是 true.
  • config.consider_all_requests_local?是個標(biāo)記. 如果為 true 則任何攜帶詳細(xì)調(diào)試信息的錯誤信息都會被添加到 HTTP 回應(yīng)(response) 里, 并且?Rails::Info?控制器會顯示應(yīng)用運行時上下文到?/rails/info/properties. 在開發(fā)和測試模式默認(rèn)是 true , 在生產(chǎn)模式是 false. 為了更細(xì)致的控制, 將其設(shè)置為 false 并在控制器里實現(xiàn)+local_request?+來指定哪些請求的錯誤信息需要提供調(diào)式信息.
  • config.dependency_loading?是個標(biāo)志. 將其設(shè)置為 false 可以使自動加載常量失效. 它只在?config.cache_classes?為 true 的時候才有效, 這在生產(chǎn)模式是默認(rèn)的. 這個標(biāo)志會被?config.threadsafe!?設(shè)置為 false.
  • config.eager_load_paths?接受一個路徑數(shù)組。 如果有開啟類緩存,那么 Rails 會在啟動時即時加載(eager load)這些路徑里的內(nèi)容. 默認(rèn)是應(yīng)用程序?app?目錄下的所有目錄.
  • config.encoding?設(shè)置整個應(yīng)用程序的編碼. 默認(rèn)是 UTF-8
  • config.exceptions_app?設(shè)置異常處理應(yīng)用程序. 這個應(yīng)用程序在異常發(fā)生時會被ShowException中間件調(diào)用. 默認(rèn)是ActionDispatch::PublicExceptions.new(Rails.pulic_path).
  • config.file_watcher?被用于監(jiān)測文件系統(tǒng)里文件更新的類. 在?config.reload_classes_only_on_change?為 true 的時候有效. 必須符合?ActiveSupport::FileUpdateChecker?API.
  • config.file_parameters?用于過濾掉不想被顯示在日志里的參數(shù), 比如密碼和信用卡號碼.
  • config.force_ssl?強制所有的請求使用+ActionDispath::SSL+中間件走 HTTPS 協(xié)議.
  • config.log_level?定義 Rails 日志的冗長程度. 這個選項默認(rèn)為?:debug?并對所有模式有效,除了生產(chǎn)模式. 生產(chǎn)模式默認(rèn)為+:info+
  • config.log_tags?接受一組方法, 這些方法會被?request?對象使用. 這使標(biāo)記調(diào)試信息日志行更容易, 像子域名和請求標(biāo)識(id) — 在調(diào)試多用戶應(yīng)用程序產(chǎn)品時都很有用.
  • config.logger?接受一個日志類, 這個類遵循?Log4r?或者 Ruby 默認(rèn)的?logger?類的接口. 默認(rèn)是?ActiveSupport::BufferedLogger?的對象, 在生產(chǎn)模式是關(guān)閉的.
  • config.middleware?讓你配置應(yīng)用程序的中間件. 這在下面的?Configuring Middleware?章節(jié)有更深入的概述
  • config.preload_frameworks?使應(yīng)用程序在啟動時是否預(yù)加載所有的框架. 通過?config.threadsafe!?開啟. 默認(rèn)是?nil, 所以是關(guān)閉的.
  • config.preload_classes_only_on_change?當(dāng)被監(jiān)測文件發(fā)生改變時,類是否能被重新加載.該值默認(rèn)設(shè)置為 true, 所以會默認(rèn)監(jiān)測所有在自動加載路徑里的內(nèi)容. 如果?config.cache_classes?為 true, 這個選項會被忽略.
  • config.secret_token?用于指定一個鍵, 這讓應(yīng)用程序會話對比已有的密鑰來進行驗證以防止干擾.應(yīng)用程序會從config/initializers/secret_token.rb?文件里獲取被初始化為一個隨機值的?config.secret_token。
  • config.serve_static_assets?配置 Rails 自己處理靜態(tài)資源. 默認(rèn)為 true, 但在生產(chǎn)環(huán)境是被關(guān)閉的,因為有運行應(yīng)用程序的服務(wù)器軟件(e.g. Nginx 或 Apache)去處理靜態(tài)資源. 將其設(shè)置為與默認(rèn)值相反的 true, 則生產(chǎn)模式下會使用 WEBrick 運行(完全不建議!)或者測試你的應(yīng)用. 不然你將不能使用頁面緩存,而且對位于公共目錄下文件的請求都會被轉(zhuǎn)給 Rails 應(yīng)用.
  • config.session_store?通常在?config/initializers/session_store.rb?里設(shè)置并指定使用什么類去存儲會話. 可能的值會是默認(rèn)的+:cookie_store+,?:mem_cache_store, 或?:disabled. 最后一個告訴 Rails 不處理會話. 也可以指定自定義會話存儲:

config.session_store :my_custom_store

這個自定義存儲必須被定義為?ActionDispatch::Session::MyCustomStore. 根據(jù)這些 symbols, 它們也可以是實現(xiàn)了一些 API 的對象, 如?ActiveRecord::SessionStore, 這種情況就可以不指定命名域.

  • config.threadsafe!?激活?allow_concurrency,?cache_classes,?dependency_loading?和?preload_frameworks?來讓應(yīng)用程序?qū)崿F(xiàn)線程安全。

WARNING: 線程安全操作與一般開發(fā)模式下的 Rails 不兼容的。特別要注意的是當(dāng)你調(diào)用?config.threadsafe?的時候,自動依賴加載和類重新加載都會被自動取消。

  • config.time_zone?設(shè)置應(yīng)用程序 Active Record 可用的默認(rèn)時區(qū)。
  • config.whiny_nil?開啟或取消當(dāng)一些方法被?nil?調(diào)用且?nil?沒有這些方法的時候拋出警告。在開發(fā)和測試環(huán)境都默認(rèn)為 true.
  • config.console?讓你設(shè)置當(dāng)你運行?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
  • 配置資源

    Rails 3.1, 默認(rèn)使用?sprockets?gem 來管理資源。這個 gem 可以合并并壓縮資源以降低服務(wù)器負(fù)載。

    • config.assets.enabled?是一個標(biāo)記,這個標(biāo)記控制是否使用 asset pipeline。 這在?config/application.rb?里被明確的初始化了.
    • config.assets.compress?標(biāo)記是否壓縮已經(jīng)編譯好的資源。這在+config/production.rb+里明確的設(shè)置為 true.
    • config.assets.css_compressor?定義要使用的 CSS 壓縮器。默認(rèn)被設(shè)置為?sass-rails。目前唯一可選的值是?:yui, 這會使用?yui-compressor?gem.
    • config.assets.js_compressor?定義要使用的 JavaScript 壓縮器。很可能是?:closure,?:uglifier?和?:yui,分別需要使用到?closure-compiler,?uglifier?或者?yui-compressor?gem.
    • config.assets.paths?包含了所有用來搜尋資源的路徑。 添加到這個配置選項里的路徑都會被用于搜索資源.
    • config.assets.precompile?讓你指定其它(+application.css+ 和?application.js以外的)資源,這些資源會在?rake assets:precompile?執(zhí)行時被預(yù)編譯.
    • config.assets.prefix?指定資源目錄的前綴,默認(rèn)是+/assets+.
    • config.assets.digest?使資源的名字使用 MD5 指紋。在+production.rb+默認(rèn)設(shè)置為?true.
    • config.assets.debug?不合并壓縮資源。在?development.rb?里默認(rèn)不設(shè)置為?false.
    • config.assets.manifest?指定資源預(yù)編譯器的待編譯列表文件所在目錄完整的路徑。默認(rèn)使用?config.assets.prefix?(譯者注: 也就是開頭有一列諸如?//=require jquery?的文件所在路徑)
    • config.assets.cache_store?指定 Sprockets 使用的緩存存儲. 默認(rèn)是 Rails 的文件存儲。
    • config.assets.version?是一個字符串選項,用于生成 MD5 哈希值。可以被更改從而強制對所有文件進行預(yù)編譯.
    • config.assets.compile?是一個布爾值,可以用于讓Sprockets 在生產(chǎn)環(huán)境即時執(zhí)行編譯。
    • config.assets.logger?接受一個遵循 Log4r 或者 Ruby 默認(rèn)?Logger?類接口的日志類.默認(rèn)和?config.logger?指定的一樣。設(shè)置config.assets.logger?為 false, 就可以關(guān)閉記錄資源處理的日志。

    配置生成器

    Rails 3 允許你使用?config.generators?方法修改生成器.這個方法接受一個代碼塊:

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

    可以在這個代碼塊里使用的所有方法列表如下:

    • assets?允許在創(chuàng)建一個 scaffold 時候創(chuàng)建資源文件。默認(rèn)是?true
    • force_plural?運行將數(shù)據(jù)模型(model)的名字都變成復(fù)數(shù)。默認(rèn)是?false
    • helper?指定是否要創(chuàng)建 helpers. 默認(rèn)是?true
    • integration_tool?指定使用哪個集成工具。默認(rèn)是?nil
    • javascripts?開啟生成器中 javascripts 的 hook. 被使用于 Rails 運行?scaffold?生成器的時候。默認(rèn)是 +true+。
    • javascript_engine?配置用于生成資源的引擎(例如, coffee).默認(rèn)為?nil.
    • orm?指定使用哪個orm. 默認(rèn)是?false?并且默認(rèn)使用 Active Record.
    • performance_tool?指定使用哪個性能工具.默認(rèn)為+nil+
    • resource_controller?指定當(dāng)使用?rails generate resource時,生成控制器的生成器.默認(rèn)是?:controller
    • scaffold_controller?和 +resource_controller+不同,當(dāng)使用?rails generate scaffold時,指定生成器生成?scaffolded?控制器。
    • stylesheets?開啟生成器中的式樣的 hook 。在Rails中被用于?scaffold?生成器運行的時候, 但這個 hook 也可以用在其它生成器。默認(rèn)為?true
    • stylesheets_engine?配置生成資源的式樣引擎(例如, sass)。默認(rèn)是?css
    • test_framework?指定使用哪個測試框架。默認(rèn)為?false, 并且默認(rèn)使用 Test::Unit.
    • template_engine?指定使用哪個模板引擎,比如 ERB 或 Haml.默認(rèn)為?:erb.

    配置中間件

    所有的 Rails 應(yīng)用程序都來自于一系列標(biāo)準(zhǔn)的中間件,這些中間件以下列順序被使用于開發(fā)環(huán)境:

    • ActionDispatch::SSL?強制所有請求走HTTPS協(xié)議。在?config.force_ssl?被設(shè)置為?true?的時候有效。傳遞給它的選項可以在config.ssl_options?編輯.
    • ActionDispatch::Static?用于處理靜態(tài)資源。在?config.serve_static_assets?設(shè)置為?true?的時候無效。
    • Rack::Lock?將應(yīng)用封裝成互斥體,所以應(yīng)用程序一次只能被單個線程調(diào)用。只在?config.action_controller_concurrency?設(shè)置為 +false+的時候才有效, 這是默認(rèn)的.
    • ActiveSupport::Cache::Strategy::LocalCache?作為基礎(chǔ)的內(nèi)存支持緩存器(memory backed cache). 這個緩存器不是線程安全的,并且只是作為單個線程的臨時內(nèi)存緩存器。
    • Rack::Runtime?設(shè)置一個?X-Runtime?頭部,包括執(zhí)行請求所用的時間(精確到秒)。
    • Rails::Rack::Logger?通知日志請求已經(jīng)開始。請求完成后,清除所有的日志。
    • ActionDispatch::ShowExceptions?救回(回收)應(yīng)用程序返回的異常,如果是本地請求或者?config.consider_all_requests_local?設(shè)置為?true?的話,還會渲染出漂亮的異常信息頁。如果?config.action_dispatch.show_exceptions?設(shè)置為 +false+, 拋出的異常會被忽略。
    • ActionDispatch::RequestId?產(chǎn)生一個唯一的 X-Request-Id 頭部給 response,并啟用?ActionDispatch::Request#uuid?方法.
    • ActionDispatch::RemoteIp?用于防止IP欺騙攻擊。可在?config.action_dispatch.id_spoofing_check?和config.action_dispatch.trusted_proxies?進行設(shè)置.
    • Rack::Sendfile?攔截所有正文(HTTP 正文)用于處理文件的響應(yīng)(responses),并將其替換成一個服務(wù)器指定的 X-Sendfile 頭部(HTTP 頭部). 可以在?config.action_dispatch.x_sendfile_header?配置.
    • ActionDispatch::Callbacks?在處理請求之前運行預(yù)先準(zhǔn)備的回調(diào)。
    • ActiveRecord::ConnectionAdapters::ConnectionManagement?在每次請求完成后清除連接,除非?rack.test?鍵在請求的環(huán)境設(shè)置中設(shè)置為?true
    • ActiveRecord::QueryCache?緩存請求中產(chǎn)生的 SELECT 查詢。如果換成任何 INSERT 或者 UPDATE 則緩存會被清除.
    • ActionDispatch::Cookies?為請求設(shè)置 cookies.
    • ActionDispatch::Session::CookieStore?負(fù)責(zé)存儲cookies中的會話。修改?config.action_controller.session_store?為那些可選值,可以使用其它可選的中間件. 另外,傳遞給這個中間件的參數(shù)可以在?config.action_controller.session_options?配置.
    • ActionDispatch::Flash?設(shè)置?flash?的鍵值。只有在?config.action_controller.session_store?設(shè)置為某個值才會起作用
    • ActionDispatch::ParamsParser?將請求中的參數(shù)解析到?params?里.
    • Rack::MethodOverride?如果?params[:_method]?有設(shè)置值,那么允許方法被重寫。這個中間件支持 PATCH, PUT 和 DELETE 的 HTTP方法類型.
    • ActionDispatch::Head?將所有 HEAD 請求轉(zhuǎn)換成 GET 請求,然后再處理。
    • ActionDispatch::BestStandardsSupport?啟用 “最好的標(biāo)準(zhǔn)支持” 所以IE8能正確的渲染元素.

    除了這些常用的中間件,你可以通過?config.middleware.use?方法添加自己的:

    config.middleware.use Magical::Unicorns

    這會將?Magical::Unicorns?中間件放置到堆棧的尾部。如果你想添加一個中間件到另一個的前面,可以使用?insert_before

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

    當(dāng)然也有 +insert_after+,它將把某個中間件插入到另一個的后面:

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

    所有的中間件也可以被完全移除并替換成其它的:

    config.middleware.swap ActionDispatch::BestStandardsSupport, Magical::Unicorns

    它們也能完全從堆棧中被移除.

    config.middleware.delete ActionDispatch::BestStandardsSupport

    除了這些操作堆棧的方法,如果你的應(yīng)用程序只作為一個 API 端的話,中間件堆棧可以像這樣設(shè)置:

    config.middleware.http_only!

    通過這樣做,Rails將會創(chuàng)建一個更小的中間件堆棧,這個堆棧中不會添加一些通常對瀏覽器訪問有用的中間件, 比如 Cookies, 會話,閃存(Flash), BestStandardsSupport 和 MethodOverride. 你可以手動添加它們。查閱?API App docs?可以獲得更多關(guān)于如何設(shè)置你API應(yīng)用程序的信息。

    配置 i18n

    • config.i18n.default_locale?設(shè)置某個使用 i18n 應(yīng)用程序的默認(rèn)本地語言環(huán)境。默認(rèn)為?:en
    • config.i18n.load_path?設(shè)置 Rails 用來搜索本地化文件的路徑。默認(rèn)為?config/locales/*.{yml,rb}

    配置 Active Record

    config.active_record?包括了下列配置選項:

    • config.active_record.logger?接受一個符合 Log4r 或者 Ruby 默認(rèn)日志類 接口的日志類, 并會被傳遞給任何新建立的數(shù)據(jù)庫連接. 你可以通過調(diào)用 Active Record 模型類或者示例的?logger?來取得這個日志類. 默認(rèn)設(shè)置為?nil?以取消日志記錄.
    • config.active_record.primary_key_prefix_type?讓你調(diào)整主鍵欄的名字。默認(rèn)情況下, Rails 假設(shè)主鍵欄被命名為+id+(這個配置選項不需要設(shè)置。) 。還有兩個其它選擇:
      • :table_name?將 Customer 類的主鍵欄命名為 +customerid+。
      • :table_name_with_underscore?將 Customer 類的主鍵欄命名為 +customer_id+。
    • config.active_record.table_name_prefix?讓你設(shè)置一個全局字符串附加到表名前面. 如果你這個字符串設(shè)置為?northwest_, 那么 Customer 類將尋找?northwest_customers?表作為它的表. 默認(rèn)是一個空字符串.
    • config.active_record.table_name_suffix?讓你設(shè)置一個全局字符串附加到表名后面. 如果你將它設(shè)置為?_northwest, 那么 Customer 類將會找到?customers_northwest?作為它的表. 默認(rèn)是一個空字符串.
    • config.active_record.pluralize_table_names?指定 Rails 是否以使用單復(fù)數(shù)的表名. 如果設(shè)置為 true (默認(rèn)值), 那么 Customer 類將會使用?customers?表. 如果設(shè)置為 false, 那么 Customer 類將會使用?customer?表.
    • config.active_record.default_timezone?當(dāng)從數(shù)據(jù)庫獲取日期和時間時,決定是否使用?Time.local?(如果設(shè)置為?:local) 還是Time.utc?(如果設(shè)置為?:utc). 雖然 Active Record 在 Rails 以外使用時默認(rèn)為?:local, 但在 Rails 中默認(rèn)為?:utc.
    • config.active_record.schema_format?控制將數(shù)據(jù)庫結(jié)構(gòu)導(dǎo)出到文件的格式。選項分別是?:ruby(默認(rèn)),與數(shù)據(jù)庫無關(guān)的選項但與 migrations 相關(guān). 或者是?:sql, 一連串 (大部分情況是與數(shù)據(jù)庫相關(guān)的) SQL 語句.
    • config.active_record.timestamped_migrations?控制所有遷移腳本 (migrations) 的命名中是否帶有序列或者時間戳. 如果有多個開發(fā)者開發(fā)同一個應(yīng)用程序,建議使用默認(rèn)的時間戳.
    • config.active_record.lock_optimistically?控制 Active Record 是否使用樂觀鎖, 默認(rèn)是使用的。
    • config.active_record.whitelist_attributes?將會創(chuàng)建一個空白的白名單,這個名單包含了在批量賦值 (mass assignment) 防護下可進行批量賦值的模型屬性,并對應(yīng)用程序里所有模型有效。
    • config.active_record.auto_explain_threshold_in_seconds?配置自動執(zhí)行(sql指令)+EXPLAIN+的臨界值。所有逼近臨界值的查詢會把它們的查詢計劃進行日志記錄。在開發(fā)模式下默認(rèn)是 0.5。
    • config.active_record.dependent_restrict_raises?當(dāng)某個具有?:dependent => :restrict?關(guān)聯(lián)關(guān)系的對象被刪除時,控制該行為。設(shè)置為false將會阻止拋出+DeleteRestrictionError+異常,并且會將錯誤信息添加入到模型對象里。在開發(fā)模式下默認(rèn)為flase.
    • config.active_record.mass_assignment_sanitizer?將會判斷 Rails 中對批量賦值(mass assignment)清理的嚴(yán)格程度。默認(rèn)為:strict. 在這個模式下,調(diào)用?create?或者?update_attributes?并對任何不是+attr_accessible+的屬性進行批量賦值的話,將會拋出一個異常。如果設(shè)置這個選項為?:logger的話,只會將某個屬性被賦值時的異常信息打印到日志文件,并不拋出異常。

    MySQL 適配器的一個附加配置選項:

    • ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans?控制活動日志(Active Record)是否會將MySQL數(shù)據(jù)庫中tinyint(1)?欄當(dāng)作布爾值,默認(rèn)是true.

    結(jié)構(gòu)導(dǎo)出器(Schema Dumper)的一個附加配置選項:

    • ActiveRecord::SchemaDumper.ignore_tables?接受一組表,任何產(chǎn)生的(數(shù)據(jù)庫)結(jié)構(gòu)(schema)文件都_不_會包含這些表。如果config.active_record.schema_format == :ruby, 那么這個設(shè)置會被忽略.

    配置 Action Controller

    config.action_controller?包括了這些配置設(shè)置:

    • config.action_controller.asset_host?設(shè)置資源主機。當(dāng)CDNs被用于資源主機而不是應(yīng)用程序自己處理資源時很有用.
    • config.action_controller.asset_path?接受一個代碼塊,這個代碼塊配置在哪里可以找到資源文件。更簡短的版本是config.asset_path.
    • config.action_controller.page_cache_directory?是 web 服務(wù)器的文檔的根目錄,使用Base.page_cache_directory = “/document/root”的值.在 Rails 中,這個目錄已經(jīng)被設(shè)置為?Rails.public_path?(它的值通常設(shè)置為Rails.root + “/public”)。改變這個值對防止public里的文件名沖突很有用,但這么做需要配置你的 web 服務(wù)器從新的地方尋找緩存文件。
    • config.action_controller.page_cache_extension?配置保存在?page_cache_directory?的緩存頁面使用的擴展名。默認(rèn)為?.html
    • config.action_controller.perform_caching?配置應(yīng)用程序是否進行緩存。開發(fā)模式默認(rèn)關(guān)閉,在生產(chǎn)模式默認(rèn)開啟.
    • config.action_controller.default_charset?規(guī)定所有渲染器的字符編碼。默認(rèn)是 “utf-8”。
    • config.action_controller.logger?接受一個符合 Log4r 或者 Ruby 默認(rèn)日志類的接口的日志類,這個日志類用于記錄來自 Action Controller 的信息。設(shè)置為?nil?則不進行記錄。
    • config.action_controller.request_forgery_protection_token?為 RequestForgery 設(shè)置令牌的參數(shù)名。調(diào)用?protect_from_forgery默認(rèn)將其設(shè)置為+authenticity_token+。
    • config.action_controller.allow_forgery_protection_token?是否使用 CSRF 保護。默認(rèn)在測試模式下使用,其它模式不使用。
    • config.action_controller.relative_url_root?用于告訴 Rails 你要部署到某個子目錄。默認(rèn)為ENV[‘RAILS_RELATIVE_URL_ROOT’]。

    緩存代碼的兩個附加設(shè)置:

    • ActionController::Base.page_cache_directory?設(shè)置緩存頁面的存放目錄,這些頁面是 Rails 為你的web服務(wù)器創(chuàng)建的。默認(rèn)為Rails.public_path(通常設(shè)置為?Rails.root + “/public”).
    • ActionController::Base.page_cache_extensions?設(shè)置緩存頁(文件)的擴展名(如果請求已經(jīng)有擴展名,那將忽略這個設(shè)置)。默認(rèn)為?.html。

    Active Record 會話存儲也可以這樣配置:

    • ActiveRecord::SessionStore::Session.table_name?設(shè)置會話存儲使用的表名。默認(rèn)為 +session+。
    • ActiveRecord::SessionStore::Session.primary_key?設(shè)置會話存儲表 ID 欄的名字。默認(rèn)為 +session_id+。
    • ActiveRecord::SessionStore::Session.data_column_name?設(shè)置存放匯集了會話數(shù)據(jù)那欄的名字。默認(rèn)為 +data+。

    配置 Action Dispatch

    • config.action_dispatch.session_store?設(shè)置會話數(shù)據(jù)存儲的名字。默認(rèn)是?:cookie_store;其它可選的包括?:active_record_store,:men_cache_store?或者你自己定義的類名。
    • config.action_dispatch.tld_length?設(shè)置應(yīng)用程序 TLD (頂級域)的長度.默認(rèn)為?1.
    • ActionDispatch::Callbacks.before?接受一個代碼塊,在請求之前運行。
    • ActionDispatch::Callbacks.to_prepare?接受一個代碼塊,在?Action::Dispatch::Callbacks.before?之后運行,但在請求之前。+development+模式中每個請求都會運行這個代碼塊,但在?production?模式下或者設(shè)置?cache_classes?為 true 的環(huán)境只運行一次.
    • ActionDispatch::Callbacks.after?接受一個代碼塊,在請求之后運行。

    配置 Action View

    config.action_view?包括了這些配置設(shè)置:

    • config.action_view.field_error_proc?提供一個 HTML 生成器,用于顯示 Active Record 的錯誤信息。默認(rèn)為

    Proc.new { |html_tag, instance| %Q(

    #{html_tag} ).html_safe }
    • config.action_view.default_form_builder?告訴Rails默認(rèn)使用哪個表格創(chuàng)建器。默認(rèn)為?ActionView::Helpers::FormBuilder.
    • config.action_view.logger?接受一個日志類,這個類要遵循 Log4r 或者 Ruby 默認(rèn)日志類的接口。該類會被用于記錄來自 Action View 的信息。設(shè)置為?nil?來關(guān)閉日志。
    • config.action_view.erb_trim_mode?給出被ERB使用的修剪模式。默認(rèn)為?‘-’。更多信息查閱?ERB documentation
      (譯者注:?<%= content -%>?將清除 content 首尾的空白)
    • config.action_view.javascript_expansions?是一個包含了擴展的哈希數(shù)組。這些擴展可以通過 JavaScript 導(dǎo)入標(biāo)簽被導(dǎo)入使用。默認(rèn)情況下是這么定義的:

    config.action_view.javascript_expansions = { :defaults => %w(jquery jquery_ujs) }

    然而,你也許像這樣定義其它的擴展:

    config.action_view.javascript_expansions[:prototype] = [‘prototype’, ‘effects’, ‘dragdrop’, ‘controls’]

    并且可以在視圖里像這樣進行引用:

    <%= javascript_include_tag :prototype %>

    • config.action_view.stylesheet_expansions?跟?javascript_expansions?的工作方式差不多,但沒有默認(rèn)的項。在這個哈希數(shù)組定義的所有鍵都可以在視圖里像這樣引用:

    <%= stylesheet_link_tag :special %>

    • config.action_view.cache_asset_ids?當(dāng)啟用緩存時,資源標(biāo)簽助手(helper)會進行幾個高耗的文件系統(tǒng)調(diào)用(默認(rèn)進行文件系統(tǒng)時間戳檢查)。然而這樣可以防止當(dāng)服務(wù)器運行時修改任何資源文件。
    • cofnig.action_view.embed_authenticity_token_in_remote_forms?讓你設(shè)置具有?:remote => true?屬性的表單中是否默認(rèn)帶有 +authenticity_token+。默認(rèn)情況下這個值設(shè)置為 false , 這意味著遠程表單里將不包含 +authenticity_token+,這對你局部緩存表單會很有用。運程表單將通過?meta?標(biāo)簽獲得真實性(認(rèn)證), 所以嵌入是必要的,除非你支持沒有 Javascript 的瀏覽器。在這種情況下,你可以投遞?:authenticity_token => true?作為表單參數(shù)或者將這個配置設(shè)置為?true
    • config.action_view.prefix_partial_path_with_controller_namespace?用來指定控制器是否從模板的子目錄中根據(jù)控制器的命名空間搜索 partial 模板。例如,考慮某個命名為?Admin::PostsController?的控制器,它渲染這個模板:

    <%= render @post %>

    默認(rèn)設(shè)置為?true, 這樣就會使用位于?/admin/posts/_post.erb?的局部視圖。將其值設(shè)置為?false?則會渲染?/posts/_post.erb,這和沒有命名域的控制器的渲染動作是一樣的。

    配置 Action Mailer

    config.action_mailer?有這么些可用的設(shè)置:

    • config.action_mailer.logger?接受一個日志類,這個類要遵循 Log4r 或者 Ruby 默認(rèn)日志類的接口。這個類會被用于記錄來自 Action Mailer 的信息。設(shè)置為?nil?關(guān)閉日志。
    • config.action_mailer.smtp_settings?允許詳細(xì)配置?:smtp?傳送方法。它接受一個選項哈希數(shù)組,可以包括一下任何選項:
      • :address?– 允許你使用遠程的郵件服務(wù)器。只要改變默認(rèn)設(shè)置的 “l(fā)ocalhost” 值就可以了。
      • :port?– 萬一你的郵件服務(wù)器不是運行在 25 端口的話,在這進行修改。
      • :domain?– 如果你需要指定一個 HELO 域名,在這里設(shè)置。
      • :user_name?– 如果你的郵件服務(wù)器需要認(rèn)證,在這個設(shè)置里填入用戶名。
      • :password?– 如果你的郵件服務(wù)器需要認(rèn)證,在這里設(shè)置密碼。
      • :authentication?如果你的郵件服務(wù)器需要認(rèn)證,你需要在這指定認(rèn)證的類型。這是一個 symbol 值,可填入?:plain,?:login,:cram_md5?其中一個。
    • config.action_mailer.sendmail_settings?允許詳細(xì)配置?sendmail?發(fā)送方法。它接受一個包含選項的哈希數(shù)組,包括以下任何選項:
      • :location?– sendmail 執(zhí)行文件的位置. 默認(rèn)為?/usr/sbin/sendmail。
      • :arguments?– 命令行參數(shù)。默認(rèn)為?-i -t。
    • config.action_mailer.raise_delivery_errors?設(shè)定當(dāng)郵件發(fā)送失敗時是否拋出異常。默認(rèn)為 true.
    • config.action_mailer.delivery_method?指定發(fā)送方法。可用的值為?:smtp?(默認(rèn)),?:sendmail, 和?:test。
    • config.action_mailer.perform_deliveries?設(shè)定郵件是否會被發(fā)送,默認(rèn)為 true. 可以將其設(shè)置為 false 以方便測試。
    • config.action_mailer.default?配置 Action Mailer 的默認(rèn)值。這些默認(rèn)值為:

      :mime_version => “1.0”,
      :charset => “UTF-8”,
      :content_type => “text/plain”,
      :parts_order => [ “text/plain”, “text/enriched”, “text/html” ]
    • config.action_mailer.observers?登記觀察者,在郵件被發(fā)送時會作出提醒。

      config.action_mailer.observers = [“MailObserver”]
    • config.action_mailer.interceptors?登記攔截器,它會在郵件發(fā)送前被調(diào)用。

      config.action_mailer.interceptors = [“MailInterceptor”]

    配置 Active Support

    Active Support 有如下一些可用配置選項:

    • config.active_support.bare?是否讓?active_support/all?在 Rails 啟動時的加載。默認(rèn)為?nil, 意思是?active_support/all?已經(jīng)加載了(所以Rails不會再加載)。
    • config.active_support.escape_html_entities_in_json?設(shè)置在 JSON 序列化中是否剔除 HTML 實體。默認(rèn)為?true.
    • config.active_support.use_standard_json_time_format?是否使日期序列化成 ISO 8601 格式。默認(rèn)為?false.
    • ActiveSupport::BufferedLogger.silencer?設(shè)為?false?則禁止取消代碼塊里的日志記錄。默認(rèn)為 +true+。
    • ActiveSupport::Cache::Store.logger?設(shè)定在緩存存儲操作中的日志類。
    • ActiveSupport::Deprecation.behavior?config.active_support.deprecation?可選的設(shè)置器,它能配置 Rails 廢棄警告的動作。
    • ActiveSupport::Deprecation.silence?接受一個代碼塊,這個代碼塊里的所有廢棄警告都會被忽略。
    • ActiveSupport::Deprecation.slienced?設(shè)置是否打印出廢棄警告。
    • ActiveSupport::Logger.silencer?設(shè)為?false?則禁止取消代碼塊里的日志記錄。默認(rèn)為 +true+。

    配置數(shù)據(jù)庫

    幾乎所有 Rails 應(yīng)用程序都會和數(shù)據(jù)庫交互。 數(shù)據(jù)庫在一個叫做?config/database.yml?的文件里被指定的。 如果你在一個新的 Rails 應(yīng)用里打開這個文件,你會看到一個默認(rèn)數(shù)據(jù)庫配置為 SQLite3。 該文件包含三個部分,分別是不同的 Rails 運行環(huán)境:

    • development?環(huán)境用于你的開發(fā)或本地電腦,所以你可以手動控制應(yīng)用程序。
    • test?環(huán)境用于運行自動測試的時候。
    • production?環(huán)境用于部署應(yīng)用程序給全世界用的時候。

    TIP: 你不必手動更新數(shù)據(jù)庫配置文件。如果你查看應(yīng)用程序生成器的選項, 你會發(fā)現(xiàn)其中一個選項為?—database. 這個選項允許你選擇一個適配器,這個適配器可以是最常用的關(guān)系型數(shù)據(jù)庫。你甚至可以重復(fù)運行生成器:?cd .. && rails new blog —database=mysql. 如果你確認(rèn)重寫?config/database.yml?文件, 你的應(yīng)用程序?qū)⒈慌渲檬褂?MySQL 而不是 SQLite. 常用數(shù)據(jù)庫連接的詳細(xì)例子會在下面說到。

    配置 SQLite3 數(shù)據(jù)庫

    Rails 內(nèi)建支持?SQLite3, SQLite3 是一個輕量型,不需要服務(wù)器的數(shù)據(jù)庫應(yīng)用程序。在一個繁忙的生產(chǎn)環(huán)境中應(yīng)該會使其過載,但在開發(fā)和測試環(huán)境會運作的很好。創(chuàng)建一個新項目的時候,Rails 會默認(rèn)使用 SQLite 數(shù)據(jù)庫,但你可以隨后自行修改.

    下面這部分是默認(rèn)配置文件中開發(fā)環(huán)境的連接信息:

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

    NOTE: Rails 默認(rèn)使用 SQLite3 數(shù)據(jù)庫存儲數(shù)據(jù)是因為它是一個不需要配置就能工作的數(shù)據(jù)庫。Rails 也支持 MySQL 和 PostgreSQL, 并且有許多其它數(shù)據(jù)庫的插件。如果你在生產(chǎn)環(huán)境中使用數(shù)據(jù)庫,Rails 通常都能為其提供一個適配器.

    配置 MySQL 數(shù)據(jù)庫

    如果你選擇 MySQL 而不是已有的 SQLite3 數(shù)據(jù)庫,+config/database.yml+ 將會有些不同。下面是開發(fā)環(huán)境部分:

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

    如果你的開發(fā)電腦安裝的 MySQL 有一個沒有密碼的 root 用戶,你可以使用這個配置。不然,在開發(fā)環(huán)境部分的更改相應(yīng)的 username 和 password。

    配置 PostgreSQL 數(shù)據(jù)庫

    如果你選擇 PostgreSQL,+config/database.yml+ 要被自定義使用 PostgreSQL 數(shù)據(jù)庫:

    development:
    adapter: postgresql
    encoding: unicode
    database: blog_development
    pool: 5
    username: blog
    password:

    如果你使用外部的連接池管理的話,你可以取消 Rails 的 prepared statements:

    production:
    adapter: postgresql
    prepared_statements: false

    為 JRuby 平臺配置 SQLite3

    如果你選擇使用 SQLite3 并且使用的是JRuby,?config/database.yml?將會有一點不同。這是開發(fā)環(huán)境部分:

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

    為 JRuby 平臺配置 MySQL

    如果你選擇使用 MySQL 并且使用的是JRuby,?config/database.yml?將會有一點不同。這是開發(fā)環(huán)境部分:

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

    為 JRuby 平臺配置 PostgreSQL

    如果你選擇使用 PostgreSQL 并且使用的是JRuby,?config/database.yml?將會有一點不同。這是開發(fā)環(huán)境部分:

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

    修改?development?部分相應(yīng)的用戶名和密碼。

    Rails 環(huán)境設(shè)置

    Rails 的某些部分也可以通過設(shè)置環(huán)境變量,進行外部賦值來配置。以下環(huán)境變量會被 Rails 的各部分識別:

    • +ENV[“RAILS_ENV”] 定義了 Rails 的運行環(huán)境 (生產(chǎn),開發(fā),測試等等)。
    • +ENV[“RAILS_RELATIVE_URL_ROOT”] 當(dāng)你的應(yīng)用程序部署到某個子目錄下時,用它幫助路由(routing)代碼識別 URLs。
    • +ENV[“RAILS_ASSET_ID”] 將重寫默認(rèn)的 cache-busting 時間戳章,這個時間戳章是 Rails 為可下載資源生成的.
    • ENV[“RAILS_CACHE_ID”]?和?ENV[“RAILS_APP_VERSION”]?用于生成 Rails 緩存代碼的擴展緩存鍵。這可以讓同一個應(yīng)用程序有多個獨立分開的緩存。

    使用 Initializer 文件

    加載完框架和應(yīng)用程序的所有 gems 之后,Rails 會接著去加載所有的初始化程序. 初始化程序是存放在?config/initializers?里任何的一個 Ruby 文件。你可以使用 initializers 容納所有待配置選項和設(shè)置,它們會在所有框架和 gems 加載完之后進行配置和設(shè)置,例如為這些部分配置設(shè)置的選項。

    NOTE: 你可以使用子文件夾來組織你的初始化程序, 因為 Rails 會縱向搜索整個 initializers 文件夾。

    TIP: 如果你的 initialziers 里有一組依賴,你可以根據(jù)名字控制加載循序。例如,?01_critical.rb?將比?01_normal.rb?先被加載。

    初始化事件

    Rails 有 5 種初始化事件, 這些事件可以被掛上 hook (以下列出了它們的運行順序)

    • before_configuration: 這個和繼承了?Rails::Application?的應(yīng)用程序常量同時運行。+config+ 回調(diào)會在這發(fā)生之前生成。
    • before_initialize: 這個在應(yīng)用程序的初始化過程之前立即運行。應(yīng)用程序的初始化過程出現(xiàn)于接近 Rails 整個初始化過程的最開始,并帶有?:bootstrap_hook?初始化程序。
    • to_prepare: 在所有為 Railties 運行(包括應(yīng)用程序自身)的初始化程序之后運行,但在即時加載(eager loading)和中間件堆創(chuàng)建之前運行。最重要的是,在+development+環(huán)境中,會在所有的請求上運行。而在?production?和?test?環(huán)境只會運行一次(啟動的期間)。
    • before_eager_load: 在即時加載(eager loading)發(fā)生之前立即運行. 這是_生產(chǎn)_ 環(huán)境的默認(rèn)行為,但在_開發(fā)_環(huán)境則不是。
    • after_initialize: 應(yīng)用程序加載后立即運行,但在應(yīng)用程序的初始化程序之前運行。

    在?Rails::Application,?Rails::Railtie?或者?Rails::Engine?的子類里使用代碼塊語法, 可以為這些事件定義 hook :

    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
  • WARNING: 應(yīng)用程序的一些部分,特別是 觀察者(observers) 和 路由(routing) 在?after_initialize?代碼塊被調(diào)用之時都還沒有啟動。

    Rails::Railtie#initializer

    Rails 有數(shù)個初始化程序在(應(yīng)用程序)啟動的時候運行,它們都使用?Rails::Railtie?的?initializer?方法定義。下面是 Active Suppport 的initialize_whiny_nils?初始化程序的例子:

    initializer “active_support.initialize_whiny_nils” do |app|
    require ‘a(chǎn)ctive_support/whiny_nil’ if app.config.whiny_nils
    end

    initializer?方法接受三個參數(shù),第一個初始化程序的名字,第二個是可選項的哈希數(shù)組(這里沒有顯示)和第三個是一個代碼塊。 選項哈希數(shù)組里的?before?鍵可以指定為指定哪個初始化程序必須在這個初始化程序之前運行,而?after?鍵則指定哪個初始化程序在這個初始化程序_之后_運行。

    通過?initializer?方法定義的初始化程序會按照它們被定義的順序運行,除了那個使用?:before?或者?:after?方法的。

    WARNING: 如果初始化程序運行有邏輯關(guān)系,你應(yīng)該將一個初始化程序放在另一個之前或者之后。比如說有 4 個初始化程序, “one” 到 “four”(按照這個順序定義),并且你定義"four"在"four"_之前_ 但在"three"_之后_運行。像這種無邏輯的定義Rails將不能確定它們的順序。

    initializer?方法的代碼塊參數(shù)是應(yīng)用程序自身的對象,所以我們能通過它使用?config?方法訪問配置,就像在例子里做的那樣。

    因為?Rails::Application?繼承了?Rails::Railtie?(非直接),你可以使用?config/application.rb?里的?initializer?方法去為應(yīng)用程序定義初始化程序.

    Initializers

    下面是一列所有能在 Rails 中找到的初始化程序,并按它們被定義的順序排列 (也是它們運行的順序,除非有其它設(shè)定)

    load_environment_hook
    作為一個占位器,所以讓?:load_environment_config?可以被定義在這之前運行。

    load_active_support?導(dǎo)入?active_support/dependencies?為 Active Support 建立基礎(chǔ)。如果?config.active_support.bare?不可確定, 也可以導(dǎo)入?active_support/all,這是默認(rèn)的。

    preload_frameworks?如果?config.preload_frameworks?為?true?或者 "可確定性的",那么將自動地加載所有 Rails 會自動加載的依賴。一般這個配置選項是關(guān)閉的。在 Rails 里,內(nèi)部的類第一次被引用的時候才會自動加載。+:preload_frameworks+ 在初始化的時候就會一次過加載完它們。

    initialize_logger?初始化應(yīng)用程序的日志類(一個?ActiveSupport::BufferedLogger?對象) 并且讓它可以通過?Rails.logger?訪問. 當(dāng)在這個點之前插入的初始化程序還沒有定義?Rails.logger?的時候運行。

    initialize_cache?如果?Rails.cache?還沒有設(shè)置,則通過引用?config.cache_store?的值并將其賦予?Rails.cache?來初始化。如果該對象有?middleware?方法,它的中間件將被插入到?Rack::Runtime?之前.

    set_clear_dependencies_hook?提供一個給?active_record.set_dispatch_hooks?使用的 hook, 它會在這個初始化程序之前運行. 這個初始化程序 — 只有在?cache_classes?設(shè)置為?false?的時候運行 — 使用?ActionDispatch::Callbacks.after?去除在請求中就已經(jīng)被引用并來自對象層面的常量(依賴),所以它們會在后續(xù)的請求中被重新加載。

    initialize_dependency_mechanism?如果?config.cache_classes?為 true, 配置?ActiveSupport::Dependencies.mechanism?去?require依賴而不是?load?它們。

    bootstrap_hook?運行所有配置了?before_initialize?的代碼塊。

    i18n.callbacks?在開發(fā)環(huán)境中,建立一個?to_prepare?回調(diào), 如果任何一個本地化文件從最后一次請求之后有更改, 這個回調(diào)將會調(diào)用I18n.reload!。

    active_support.initialize_whiny_nils?在?config.whiny_nils?為 true 的情況下引入?active_support/whiny_nil?這個文件會輸出如下錯誤:

    Called id for nil, which would mistakenly be 4 — if you really wanted the id of nil, use object_id

    和:

    You have a nil object when you didn’t expect it!
    You might have expected an instance of Array.
    The error occurred while evaluating nil.each

    active_support.deprecation_behaivor?為(運行)環(huán)境建立廢棄報告,默認(rèn)開發(fā)環(huán)境為?:log, 生產(chǎn)環(huán)境為?:notify?和 測試環(huán)境的:stderr。 如果?config.active_support.deprecation?沒有設(shè)置值,那么這個初始化程序就會提示用戶去?config/environments?里與當(dāng)前環(huán)境對應(yīng)的文件修改該行(config.active_support.deprecation)。那個值可以是一個數(shù)組。

    active_support.initialize_time_zone?根據(jù)?config.tiem_zone?設(shè)置為應(yīng)用程序設(shè)置默認(rèn)的時區(qū),默認(rèn)為 “UTC”.

    action_dispatch.configure?配置?ActionDispatch::Http::URL.tld_length?的值為?config.action_dispatch.tpl_length?的值。

    action_view.cache_asset_ids?當(dāng) Active Support 加載時,設(shè)置ActionView::Helpers::AssetTagHelper::AssetPatchs.cache_asset_ids?為?false, 但前提是?config.cache_classes?也有加載。

    active_view.javascript_expansions?登記由?config.active_view.javascript_expansions?和config.action_view.stylesheet_expansions?建立起來的擴展名,這個擴展名可以被 Action View 識別并且在視圖中使用.

    action_controller.logger?設(shè)置?ActionController::Base.logger?— 如果這個還沒有設(shè)置 — 為?Rails.logger。

    action_controller.initialize_framework_caches?設(shè)置?ActionController::Base.cache_store?— 如果它還沒有被設(shè)置 — 為Rails.cache.

    action_controller.set_configs?通過使用?config.action_controller?里的設(shè)置來建立 Action Controller. 而這個初始化程序是將方法名作為 setters?send?給?ActionController::Base?并通過它傳值來使用?config.action_controller?的設(shè)置的。

    action_controller.compile_config_methods?為指定的配置設(shè)置方法初始化,所以它們能被更快的訪問。

    active_record.initialize_timezone?設(shè)置?ActiveRecord::Base.time_zone.aware_attributes?為 true, 就好像設(shè)置ActiveRecord::Base.default_timezone?為 UTC. 當(dāng)屬性從數(shù)據(jù)庫被讀取的時候,它們會被轉(zhuǎn)換成由?Time.zone?指定的時區(qū).

    active_record.logger?設(shè)置?ActiveRecord::Base.logger?— 如果它還沒有設(shè)置 — 為?Rails.logger。

    active_record.set_configs?通過使用?config.active_record?里的設(shè)置來建立 Action Record. 而這個初始化程序是將方法名作為 setters?send?給?ActionRecord::Base?并通過它傳值來使用?config.active_record?的設(shè)置的。

    active_record.initialize_database?從?config/database.yml?加載數(shù)據(jù)庫配置(默認(rèn))并為當(dāng)前環(huán)境建立連接。

    active_record.log_runtime?引入?ActiveRecord::Railties::ControllerRuntime,它會負(fù)責(zé)為請求代碼塊向日志器報告 Active Record 調(diào)用所使用的時間.(譯者注: 就是說?ActiveRecord::Railties::ControllerRuntime?會記錄一個請求發(fā)生時調(diào)用 Active Record 所占用的時間到日志里)

    active_record.set_dispatch_hooks?如果?config.cache_classes?設(shè)置為?false?的話,重置所有可重載的數(shù)據(jù)庫連接。

    action_mailer.logger?設(shè)置?ActionMailer::Base.logger?— 如果它還沒又被設(shè)置 — 為?Rails.logger.

    action_mail.set_configs?通過使用?config.action_mailer?里的設(shè)置來建立 Action Mailer. 而這個初始化程序是將方法名作為 setterssend?給?ActionMailer::Base?并通過它傳值來使用?config.action_mailer?的設(shè)置的。

    action_mail.compile_config_methods?為指定的配置設(shè)置方法初始化,所以它們能被更快的訪問。

    set_load_path?這個初始化程序在?bootstrap_hook?之前運行。它將?vendor, +lib+,所有在?app?路徑下的目錄和任何在config.load_paths?里指定的路徑添加到?$LOAD_PATH里

    set_autoload_paths?這個初始化程序在?bootstrap_hook?之前運行。 將?app?下所有的目錄和任何在?config.autoload_paths?指定的目錄添加到?ActiveSupport::Denpendencies.autoload_paths里。

    add_routing_paths?加載 (默認(rèn)) 所有?config/routes.rb?(在應(yīng)用程序和 railties, 包括 engines 里的) 并為應(yīng)用程序建立路由。

    add_locales?添加?config/locales?里的所有文件(來自應(yīng)用程序,railties 和 engines) 到?I18n.load_path?里,準(zhǔn)備好這些文件中的翻譯。

    add_view_paths?添加應(yīng)用程序,railties 和 engines 里的?app/views, 所以應(yīng)用程序可以在這些路徑里尋找視圖文件。

    load_environment_config?為當(dāng)前環(huán)境加載加載?config/environments?文件。

    append_asset_paths?尋找應(yīng)用程序和所有附加的 railties 的資源路徑,還有保存?config.static_asset_paths?中可用的目錄列表。

    prepend_helpers_path?添加用程序的 helpers 的查詢路徑 添加來自應(yīng)用程序,railties 和 engines 的路徑,應(yīng)用程序在這些路徑中尋找 helpers。

    load_config_initializers?加載應(yīng)用程序,railties 和 engines?config/initializers?目錄下的所有 Ruby 文件。這些文件用于容納在框架加載完畢后被使用的配置設(shè)置。

    engines_blanik_point?提供初始化過程中的某個點來放置 hook, 然后你就可以讓任何東西在 engines 之前被加載。在這個點之后,才輪到所有的 railtie 和 engine 運行。

    add_generator_templates?搜尋位于?lib/templates?為生成器所用的模板,這用于應(yīng)用程序,所有的 railtie 和 engine 還有那些添加到?config.gengrators.templates?設(shè)置里的模板。這讓所有這些模板都可被所有的生成器引用。

    ensure_autoload_once_paths_as_subset?確保?config.autoload_once_paths?只包含來自?config.autoload_paths?的路徑。如果它包含其它路徑,那么將會拋出一個異常。

    add_to_prepare_blocks?在應(yīng)用程序,一個railtie 或者 engine 里的所有?config.to_prepare?調(diào)用的代碼塊會被添加到?to_prepare?所有 Action Dispatch 回調(diào)中去。這些回調(diào)在開發(fā)環(huán)境中的每個請求發(fā)生時都會運行,或者在生產(chǎn)環(huán)境中在只有在第一次請求發(fā)生時運行。

    add_builtin_route?如果應(yīng)用程序運行在開發(fā)環(huán)境下,那么它會將?rails/info/properties?的路由添加到應(yīng)用程序的路由中去. 一般的Rails應(yīng)用里,這個路由提供了諸如 Rails 和 Ruby 的版本之類的信息顯示于?public/index.html.

    build_middleware_stack?建造應(yīng)用程序的中間件堆棧, 返回一個又?call?方法的對象,這個方法帶有請求的一個 Rack 環(huán)境對象.

    eager_load!?如果?config.cache_classes?為 true, 運行?config.before_eager_load?hook 然后調(diào)用?eager_load!, 它將會加載config.eager_load_paths?里的所有 Ruby 文件.

    finisher_hook?為應(yīng)用程序初始化過程完成后提供一個 hook, 和為應(yīng)用程序, 所有的 railtie 和 engine 運行所有的config.after_initialize?代碼塊一樣.

    set_routes_reloader?配置 Action Dispatch 通過使用?ActionDispatch::Callbacks.to_prepare?重新加載所有的路由文件.

    disable_dependency_loading?如果?config.cache_classes?設(shè)置為 true 并且?config.dependency_loading?設(shè)置為 false, 那么取消自動加載依賴.

    數(shù)據(jù)庫連接池

    Active Record 數(shù)據(jù)庫連接是由?ActiveRecord::ConnectionAdapters::ConnectionPool?來管理的, 它會確保多個線程能同時訪問有限的數(shù)據(jù)庫連接. 這個限制默認(rèn)是 5 個,可以在?database.yml?里配置.

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

    因為連接池是默認(rèn)由 ActiveRecord 內(nèi)部處理的, 所有的應(yīng)用程序服務(wù)器(Thin, mongrel, Unicorn 等等) 應(yīng)該表現(xiàn)得一樣. 最初, 數(shù)據(jù)庫連接池是空的而且將會創(chuàng)建附加的連接作為它們增長的需求,知道它達到連接池的限制.

    所有的請求在第一次需要訪問數(shù)據(jù)庫的時候都會簽出一個連接, 隨后將會將連接簽入回去. 在請求結(jié)束的時候,也就意味著該附加連連接槽應(yīng)該可以給隊列中的下一個請求使用.

    注意. 如果你啟用了?Rails.threadsafe!?模式, 那么就有機會又?jǐn)?shù)個線程同時訪問多個連接. 所有根據(jù)你當(dāng)前的請求量, 有多個線程競爭數(shù)量有限的連接也是沒問題的.

    總結(jié)

    以上是生活随笔為你收集整理的配置 Rails 应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩色图片 | 日韩精品视频中文字幕 | 免费成人电影在线观看 | 深夜国产福利 | 狠狠爱天天干 | 白浆av | 亚洲成人福利视频 | xx在线视频 | 久操视频在线观看免费 | 国产一区二区视频在线 | 伊人22 | 日韩黄 | 亚洲综合视频在线观看 | 日韩一级在线观看 | 成人免费aaa | a极毛片 | 一二三区在线 | 欧美国产高清 | 亚洲精品久久久久久久久久吃药 | 91丨九色丨蝌蚪丨老版 | 日日碰狠狠躁久久躁蜜桃 | www.夜夜操 | 日本学生初尝黑人巨免费视频 | 日本大尺度吃奶做爰久久久绯色 | 91porny首页入口 | 不卡中文字幕 | 欧美一级黑人 | 成年人免费观看视频网站 | 日韩中文字幕免费视频 | 欧美性猛交xxxx乱大交蜜桃 | 国产农村妇女毛片精品 | 午夜精品久久久久 | 亚洲永久免费网站 | 草莓视频在线观看18 | 阿v天堂2017 欧美小视频在线观看 | 国产又大又黄的视频 | 中文亚洲字幕 | 美女隐私无遮挡免费 | 日本一级淫片1000部 | 日韩色图片| 成人一级片在线观看 | 亚洲一区二区三区播放 | 亚洲免费一 | 色爽 | 亚洲免费成人在线 | 中出精品 | av自拍| 国产精品成人午夜视频 | 爱吃波客今天最新视频 | 欧美成人片在线 | 日本激情一区二区三区 | 青草成人免费视频 | 性xxx18| 精品视频一区二区三区在线观看 | 国产欧美精品在线观看 | 奇米精品一区二区三区在线观看 | 99精品国自产在线 | 免费一级肉体全黄毛片 | 在线99 | 小珊的性放荡羞辱日记 | 精品黄色一级片 | 伊人av在线播放 | 欧美一区二区人人喊爽 | 欧美成片vs欧美 | 在线一区不卡 | 中文字幕国产一区 | 97免费在线| 99色热| 91片黄在线观 | 黄色免费一级视频 | 亚洲国产97 | 中文幕无线码中文字蜜桃 | 香蕉av一区 | 悠悠色综合网 | 最近中文字幕mv | 国产一区二区精品在线 | 91精品在线观看入口 | 操校花视频 | 国产精品一级二级 | 国产精品黑丝 | 中文字幕永久视频 | 夜夜草视频 | 国产一区二区三区在线视频观看 | 午夜天堂视频 | 天天想你在线观看完整版电影高清 | 国产精品边吃奶边做爽 | 97超碰国产在线 | 99re这里只有精品在线 | 老司机性视频 | 亚洲区小说区 | 女优中文字幕 | 色老头在线视频 | 黄色一级大片在线观看 | 精品在线视频免费观看 | 国产乱子视频 | 一级特黄肉体裸片 | 国产伦精品一区二区三区四区视频 | 色一情 | 亚洲欧洲日韩 |