鼬~~哩賀,我是寫程式的山姆老弟,昨天跟大家一起看了 Rails 的 Command Line 有哪些特殊指令,今天來看看 Rails 的各種設定,像是你們在 config/application.rb
或是 config/environments/development.rb
之中會看到的各種 config.xxxx = true
一樣,夠夠~
ps. 這一篇超級無敵長,我就挑我自己覺得有用的、很驚艷的來介紹XD
ps. 本篇使用的「設定檔」字眼,將會等於
config/application.rb
或config/environments/development.rb
或config/environments/test.rb
或config/environments/production.rb
或config/environments/*.rb
)ps. 以下設定後面接的括號,將會是這個設定所需要輸入的格式,例如 config.beginning_of_week
(Symbol),這個設定的使用方式就是 config.beginning_of_week = :sunday
config.beginning_of_week
(Symbol), default: :monday
config.after_initialize
(Block), default: nil
config.console
(Class), default: nil
config.disable_sandbox
(Boolean), default: false
config.encoding
(String), default: UTF-8
config.force_ssl
(Boolean), default: false
config.middleware
(Instance), default: ActionDispatch::MiddlewareStack
config.credentials.content_path
(Instance), default: Pathname('config/credentials.yml.enc')
config.credentials.key_path
(Instance), default: Pathname('config/master.key')
config.secret_key_base
(?), default: nil
config.require_master_key
(Boolean), default: false
config.ssl_options
(Hash), default: {:hsts=>{:subdomains=>true}}
(從 Rails 5.0 以後都是這個預設值)config.time_zone
(String), default: 'UTC'
config.asset_host
(String), default: nil
config.javascript_path
(String), default: 'javascript'
config.public_file_server.enabled
(Boolean), default: true
in development,false
in productionconfig.assets.css_compressor
(Symbol), default: sass-rails
config.assets.js_compressor
(Symbol), default: ?config.assets.gzip
(Boolean), default: true
config.assets.paths
(Array), default: [.../javascript, .../images, .../stylesheets]
config.assets.precompile
(Array), default: ["manifest.js", "turbo.js", "turbo.min.js", "turbo.min.js.map", "actiontext.js", "trix.js", "trix.css", "es-module-shims.js", "es-module-shims.min.js", "es-module-shims.js.map", "stimulus.js", "stimulus.min.js", "stimulus.min.js.map", "activestorage", "activestorage.esm", "actioncable.js", "actioncable.esm.js"]
config.assets.unknown_asset_fallback
(Boolean), default: false
(從 Rails 5.1 以後都是這個預設值)config.assets.prefix
(String), default: '/assets'
config.assets.manifest
(String), default: ?config.assets.digest
(Boolean), default: true
config.assets.debug
(Boolean), default: true
in development, false
in productionconfig.assets.version
(String), default: 1.0
config.assets.compile
(Boolean), default: true
in development, false
in productionconfig.assets.logger
(Class/Boolean), default: Logger
config.assets.quiet
(Boolean), default: true
in development, false
in productionconfig.autoload_once_paths
(Array), default: []
config.autoload_paths
(Array), default: []
config.add_autoload_paths_to_load_path
(Boolean), default: true
config.eager_load
(Boolean), default: false
in development, true
in productionconfig.eager_load_namespaces
(Array), default: [I18n, ActiveSupport, ActionDispatch, ActiveModel, ActionView::Railtie, ActionView, ActionController, ActiveRecord, GlobalID, ActiveStorage::Engine, ActiveStorage, ActionMailer, ActionCable::Engine, ActionCable, ActionMailbox::Engine, ActionMailbox, ActionText::Engine, ActionText, Importmap::Engine, Turbo::Engine, Turbo, Stimulus::Engine, Rails7Minitest::Application]
config.eager_load_paths
(Array), default: ["app/channels", "app/controllers", "app/controllers/concerns", "app/helpers", "app/jobs", "app/mailers", "app/models", "app/models/concerns]
config.enable_dependency_loading
(Boolean), default: false
config.rake_eager_load
(Boolean), default: false
config.reload_classes_only_on_change
(Boolean), default: true
config.cache_store
(Symbol), default: :file_store
config.cache_classes
(Array), default: false
in development, true
in productionconfig.session_store
(Symbol), default: :cookie_store
,還有 :mem_cache_store
, :your_custom_store
, :disabled
可以選填config.consider_all_requests_local
(Boolean), default: true
in development, false
in production
config.colorize_logging
(Boolean), default: true
config.exceptions_app
(Class), default: nil
config.debug_exception_response_format
(Symbol), default: :default
,:api
for API only apps
config.file_watcher
(Class), default: ActiveSupport::FileUpdateChecker
config.filter_parameters
(Array), default: []
,但 Rails 預設會建立 config/initializers/filter_parameter_logging.rb
# config/initializers/filter_parameter_logging.rb
Rails.application.config.filter_parameters += [
:passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
config.log_formatter
(Instance), default: ActiveSupport::Logger::SimpleFormatter
config.log_level
(Symbol), default: :debug
in development & test, :info
in production,可帶入的有 :debug
, :info
, :warn
, :error
, :fatal
, :unknown
config.log_tags
(Array), default: []
config.logger
(Instance), default: ActiveSupport::TaggedLogging
可以在設定檔使用 console
block,這個 block 只有在 $ rails console
才會執行
# config/application.rb
module YourApplicationName
class Application < Rails::Application
console do
puts("Only called when using '$ rails console'. This is cool!")
end
end
end
在設定檔中可以使用的 initialization event,不只有 after_initialize
block,還有 before_configuration
, before_initialize
, to_prepare
, before_eager_load
可以透過 config.x
(這邊一定要用 x
),把自己的設定放在 Rails 的設定中
# config/application.rb
module MyApp
class Application < Rails::Application
...
config.x.payment = {
environment: 'sandbox',
merchant_id: 'development_merchant_id',
public_key: 'development_public_key',
private_key: 'development_private_key'
}
end
end
# $ rails console
# [1] pry(main)> Rails.configuration.x.payment[:environment] # sandbox
Rails 提供的細節設定有 超級無敵多,強烈推薦大家去「逛逛」 ,我這篇文章裡面寫的,大概只佔 RailsGuide 的 1/20 而已吧,其他還有關於 middleware
, i18n
, active_record
, action_controller
, action_dispatch
, action_view
, action_mailbox
, action_mailer
, active_support
, active_job
, action_cable
, active_storage
, action_text
, database
各種的設定,去看看 Rails 還有哪些奇葩的設定,是一種劉姥姥進大觀園的概念XD,不需要把這些設定記下來、也不需要全部的設定都去理解,大部分的開發者沒事不會需要調這些設定,但當有需求的時候,就會用到這些設定,所以在有需求之前,還是先去了解有哪些設定可以調整,等到了有需求的時候,就知道可以怎麼調、去哪裡找文件來調整
這一篇 RailsGuide 還有另一種用途,就是當作工具書來使用,當有需求要做一些客製化的設定,就來這篇搜尋關鍵字,看有沒有現成的設定可以直接調,不過比較麻煩的是各個設定之間,可能會打架,所以調整設定之前,要仔細看一下說明
那今天就先這樣囉,我們明天見~