aboutsummaryrefslogblamecommitdiffstats
path: root/railties/doc/guides/html/configuring.html
blob: 55f5d4855466a66c498f242037fea07c33ab47ce (plain) (tree)














































































































































































































                                                                                                                                                        


                                                                                                                       























                                                                                                                                            


                                                                                                             


































                                                                                                                                                                                 



                                                                                  
                          


















































                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    






                                                                                                                                                                                                                    
                                                                        
                                                                                                        

                                                                            
       
                                                        





                                                         



                                                                        
                          
                                   
       
                                      

















































































                                                                                                                                                    
































                                                                                                                                                                                                                          






                             





                      
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Configuring Rails Applications</title>
	<!--[if lt IE 8]>
	<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE8.js" type="text/javascript"></script>
	<![endif]-->
	<link href="stylesheets/base.css" media="screen" rel="Stylesheet" type="text/css" />
	<link href="stylesheets/forms.css" media="screen" rel="Stylesheet" type="text/css" />
	<link href="stylesheets/more.css" media="screen" rel="Stylesheet" type="text/css" />
	<style type="text/css">
		div#container {
	max-width: 900px;
	padding-bottom: 3em;
}

div#content {
	margin-left: 200px;
}

div#container.notoc {
	max-width: 600px;
}

.notoc div#content {
	margin-left: 0;
}

pre {
	line-height: 1.4em;
}

#content p tt {
	background: #eeeeee;
	border: solid 1px #cccccc;
	padding: 3px;
}

dt {
	font-weight: bold;
}

#content dt tt {
	font-size: 10pt;
}

dd {
	margin-left: 3em;
}

#content dt tt, #content pre tt {
	background: none;
	padding: 0;
	border: 0;
}

#content .olist ol {
	margin-left: 2em;
}

#header {
	position: relative;
	max-width: 840px;
	margin-left: auto;
	margin-right: auto;
}

#header.notoc {
	max-width: 580px;
}

#logo {
	position: absolute;
	left: 10px;
	top: 10px;
	width: 110px;
	height: 140px;
}

div#header h1#site_title {
	background: url('images/ruby_on_rails_by_mike_rundle2.gif') top left no-repeat;
	position: absolute;
	width: 392px;
	height: 55px;
	left: 145px;
	top: 20px;
	margin: 0;
	padding: 0;
}

#site_title span {
	display: none;
}

#site_title_tagline {
	display: none;
}

ul#navMain {
	position: absolute;
	margin: 0;
	padding: 0;
	top: 97px;
	left: 145px;
}

.left-floaty, .right-floaty {
	padding: 15px;
}

.admonitionblock,
.tableblock {
	margin-left: 1em;
	margin-right: 1em;
	margin-top: 0.25em;
	margin-bottom: 1em;
}

.admonitionblock .icon {
	padding-right: 8px;
}

.admonitionblock .content {
	border: solid 1px #ffda78;
	background: #fffebd;
	padding: 10px;
	padding-top: 8px;
	padding-bottom: 8px;
}

.admonitionblock .title {
	font-size: 140%;
	margin-bottom: 0.5em;
}

.tableblock table {
	border: solid 1px #aaaaff;
	background: #f0f0ff;
}

.tableblock th {
	background: #e0e0e0;
}

.tableblock th,
.tableblock td {
	padding: 3px;
	padding-left: 5px;
	padding-right: 5px;
}

.sidebarblock {
	margin-top: 0.25em;
	margin: 1em;
	border: solid 1px #ccccbb;
	padding: 8px;
	background: #ffffe0;
}

.sidebarblock .sidebar-title {
	font-size: 140%;
	font-weight: 600;
	margin-bottom: 0.3em;
}

.sidebarblock .sidebar-content > .para:last-child > p {
	margin-bottom: 0;
}

.sidebarblock .sidebar-title a {
	text-decoration: none;
}

.sidebarblock .sidebar-title a:hover {
	text-decoration: underline;
}

	</style>
</head>
<body>
	<div id="header" >
		<div id="logo">
			<a href="index.html" title="Ruby on Rails"><img src="images/rails_logo_remix.gif" alt="Rails" height="140" width="110" /></a>
		</div>
		
		<h1 id="site_title"><span>Ruby on Rails</span></h1>
		<h2 id="site_title_tagline">Sustainable productivity for web-application development</h2>

		<ul id="navMain">
			<li class="first-child"><a href="http://www.rubyonrails.org/" title="Ruby on Rails" class="ruby_on_rails">Ruby on Rails</a></li>
			<li><a class="manuals" href="index.html" title="Manuals Index">Guides Index</a></li>
		</ul>
	</div>

	<div id="container">
		
		<div id="sidebar">
			<h2>Chapters</h2>
			<ol>
					<li>
					<a href="#_locations_for_initialization_code">Locations for Initialization Code</a>
					</li>
					<li>
					<a href="#_using_a_preinitializer">Using a Preinitializer</a>
					</li>
					<li>
					<a href="#_initialization_process_settings">Initialization Process Settings</a>
					</li>
					<li>
					<a href="#_configuring_rails_components">Configuring Rails Components</a>
						<ul>
						
							<li><a href="#_configuring_active_record">Configuring Active Record</a></li>
						
							<li><a href="#_configuring_action_controller">Configuring Action Controller</a></li>
						
							<li><a href="#_configuring_action_view">Configuring Action View</a></li>
						
							<li><a href="#_configuring_action_mailer">Configuring Action Mailer</a></li>
						
							<li><a href="#_configuring_active_resource">Configuring Active Resource</a></li>
						
							<li><a href="#_configuring_active_support">Configuring Active Support</a></li>
						
						</ul>
					</li>
					<li>
					<a href="#_using_initializers">Using Initializers</a>
					</li>
					<li>
					<a href="#_using_an_after_initializer">Using an After-Initializer</a>
					</li>
					<li>
					<a href="#_rails_environment_settings">Rails Environment Settings</a>
					</li>
					<li>
					<a href="#_changelog">Changelog</a>
					</li>
			</ol>
		</div>
		
		<div id="content">
				<h1>Configuring Rails Applications</h1>
			<div id="preamble">
<div class="sectionbody">
<div class="para"><p>This guide covers the configuration and initialization features available to Rails applications. By referring to this guide, you will be able to:</p></div>
<div class="ilist"><ul>
<li>
<p>
Adjust the behavior of your Rails applications
</p>
</li>
<li>
<p>
Add additional code to be run at application start time
</p>
</li>
</ul></div>
</div>
</div>
<h2 id="_locations_for_initialization_code">1. Locations for Initialization Code</h2>
<div class="sectionbody">
<div class="para"><p>preinitializers
environment.rb first
env-specific files
initializers (load_application_initializers)
after-initializer</p></div>
</div>
<h2 id="_using_a_preinitializer">2. Using a Preinitializer</h2>
<div class="sectionbody">
</div>
<h2 id="_initialization_process_settings">3. Initialization Process Settings</h2>
<div class="sectionbody">
</div>
<h2 id="_configuring_rails_components">4. Configuring Rails Components</h2>
<div class="sectionbody">
<h3 id="_configuring_active_record">4.1. Configuring Active Record</h3>
<div class="para"><p><tt>ActiveRecord::Base</tt> includej a variety of configuration options:</p></div>
<div class="para"><p><tt>logger</tt> accepts a logger conforming to the interface of Log4r or the default Ruby 1.8+ Logger class, which is then passed on to any new database connections made. You can retrieve this logger by calling <tt>logger</tt> on either an ActiveRecord model class or an ActiveRecord model instance. Set to nil to disable logging.</p></div>
<div class="para"><p><tt>primary_key_prefix_type</tt> lets you adjust the naming for primary key columns. By default, Rails assumes that primary key columns are named <tt>id</tt> (and this configuration option doesn't need to be set.) There are two other choices:</p></div>
<div class="ilist"><ul>
<li>
<p>
<tt>:table_name</tt> would make the primary key for the Customer class <tt>customerid</tt>
</p>
</li>
<li>
<p>
<tt>:table_name_with_underscore</tt> would make the primary key for the Customer class <tt>customer_id</tt>
</p>
</li>
</ul></div>
<div class="para"><p><tt>table_name_prefix</tt> lets you set a global string to be prepended to table names. If you set this to <tt>northwest_</tt>, then the Customer class will look for <tt>northwest_customers</tt> as its table. The default is an empty string.</p></div>
<div class="para"><p><tt>table_name_suffix</tt> lets you set a global string to be appended to table names. If you set this to <tt>_northwest</tt>, then the Customer class will look for <tt>customers_northwest</tt> as its table. The default is an empty string.</p></div>
<div class="para"><p><tt>pluralize_table_names</tt> specifies whether Rails will look for singular or plural table names in the database. If set to <tt>true</tt> (the default), then the Customer class will use the <tt>customers</tt> table. If set to <tt>false</tt>, then the Customers class will use the <tt>customer</tt> table.</p></div>
<div class="para"><p><tt>colorize_logging</tt> (true by default) specifies whether or not to use ANSI color codes when logging information from ActiveRecord.</p></div>
<div class="para"><p><tt>default_timezone</tt> determines whether to use <tt>Time.local</tt> (if set to <tt>:local</tt>) or <tt>Time.utc</tt> (if set to <tt>:utc</tt>) when pulling dates and times from the database. The default is <tt>:local</tt>.</p></div>
<div class="para"><p><tt>schema_format</tt> controls the format for dumping the database schema to a file. The options are <tt>:ruby</tt> (the default) for a database-independent version that depends on migrations, or <tt>:sql</tt> for a set of (potentially database-dependent) SQL statements.</p></div>
<div class="para"><p><tt>timestamped_migrations</tt> controls whether migrations are numbered with serial integers or with timestamps. The default is <tt>true</tt>, to use timestamps, which are preferred if there are multiple developers working on the same application.</p></div>
<div class="para"><p><tt>lock_optimistically</tt> controls whether ActiveRecord will use optimistic locking. By default this is <tt>true</tt>.</p></div>
<div class="para"><p>The MySQL adapter adds one additional configuration option:</p></div>
<div class="para"><p><tt>ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans</tt> controls whether ActiveRecord will consider all <tt>tinyint(1)</tt> columns in a MySQL database to be booleans. By default this is <tt>true</tt>.</p></div>
<div class="para"><p>The schema dumper adds one additional configuration option:</p></div>
<div class="para"><p><tt>ActiveRecord::SchemaDumper.ignore_tables</tt> accepts an array of tables that should <em>not</em> be included in any generated schema file. This setting is ignored unless <tt>ActiveRecord::Base.schema_format == :ruby</tt>.</p></div>
<h3 id="_configuring_action_controller">4.2. Configuring Action Controller</h3>
<div class="para"><p>ActionController::Base includes a number of configuration settings:</p></div>
<div class="para"><p><tt>asset_host</tt> provides a string that is prepended to all of the URL-generating helpers in <tt>AssetHelper</tt>. This is designed to allow moving all javascript, CSS, and image files to a separate asset host.</p></div>
<div class="para"><p><tt>consider_all_requests_local</tt> is generally set to <tt>true</tt> during development and <tt>false</tt> during production; if it is set to <tt>true</tt>, then any error will cause detailed debugging information to be dumped in the HTTP response. For finer-grained control, set this to <tt>false</tt> and implement <tt>local_request?</tt> to specify which requests should provide debugging information on errors.</p></div>
<div class="para"><p><tt>allow_concurrency</tt> should be set to <tt>true</tt> to allow concurrent (threadsafe) action processing. Set to <tt>false</tt> by default.</p></div>
<div class="para"><p><tt>param_parsers</tt> provides an array of handlers that can extract information from incoming HTTP requests and add it to the <tt>params</tt> hash. By default, parsers for multipart forms, URL-encoded forms, XML, and JSON are active.</p></div>
<div class="para"><p><tt>default_charset</tt> specifies the default character set for all renders. The default is "utf-8".</p></div>
<div class="para"><p><tt>logger</tt> accepts a logger conforming to the interface of Log4r or the default Ruby 1.8+ Logger class, which is then used to log information from Action Controller. Set to nil to disable logging.</p></div>
<div class="para"><p><tt>resource_action_separator</tt> gives the token to be used between resources and actions when building or interpreting RESTful URLs. By default, this is "/".</p></div>
<div class="para"><p><tt>resource_path_names</tt> is a hash of default names for several RESTful actions. By default, the new action is named <tt>new</tt> and the edit action is named <tt>edit</tt>.</p></div>
<div class="para"><p><tt>request_forgery_protection_token</tt> sets the token parameter name for RequestForgery. Calling <tt>protect_from_forgery</tt> sets it to <tt>:authenticity_token</tt> by default.</p></div>
<div class="para"><p><tt>optimise_named_routes</tt> turns on some optimizations in generating the routing table. It is set to <tt>true</tt> by default.</p></div>
<div class="para"><p><tt>use_accept_header</tt> sets the rules for determining the response format. If this is set to <tt>true</tt> (the default) then <tt>respond_to</tt> and <tt>Request#format</tt> will take the Accept header into account. If it is set to false then the request format will be determined solely by examining <tt>params[:format]</tt>. If there is no <tt>format</tt> parameter, then the response format will be either HTML or Javascript depending on whether the request is an AJAX request.</p></div>
<div class="para"><p><tt>allow_forgery_protection</tt> enables or disables CSRF protection. By default this is <tt>false</tt> in test mode and <tt>true</tt> in all other modes.</p></div>
<div class="para"><p><tt>relative_url_root</tt> can be used to tell Rails that you are deploying to a subdirectory. The default is <tt>ENV[<em>RAILS_RELATIVE_URL_ROOT</em>]</tt>.</p></div>
<div class="para"><p>The caching code adds two additional settings:</p></div>
<div class="para"><p><tt>ActionController::Caching::Pages.page_cache_directory</tt> sets the directory where Rails will create cached pages for your web server. The default is <tt>Rails.public_path</tt> (which is usually set to <tt>RAILS_ROOT </tt> "/public"+).</p></div>
<div class="para"><p><tt>ActionController::Caching::Pages.page_cache_extension</tt> sets the extension to be used when generating pages for the cache (this is ignored if the incoming request already has an extension). The default is <tt>.html</tt>.</p></div>
<div class="para"><p>The dispatcher includes one setting:</p></div>
<div class="para"><p><tt>ActionController::Dispatcher.error_file_path</tt> gives the path where Rails will look for error files such as <tt>404.html</tt>. The default is <tt>Rails.public_path</tt>.</p></div>
<div class="para"><p>The Active Record session store can also be configured:</p></div>
<div class="para"><p><tt>CGI::Session::ActiveRecordStore::Session.data_column_name</tt> sets the name of the column to use to store session data. By default it is <em>data</em></p></div>
<h3 id="_configuring_action_view">4.3. Configuring Action View</h3>
<div class="para"><p>There are only a few configuration options for Action View, starting with four on <tt>ActionView::Base</tt>:</p></div>
<div class="para"><p><tt>debug_rjs</tt> specifies whether RJS responses should be wrapped in a try/catch block that alert()s the caught exception (and then re-raises it). The default is <tt>false</tt>.</p></div>
<div class="para"><p><tt>warn_cache_misses</tt> tells Rails to display a warning whenever an action results in a cache miss on your view paths. The default is <tt>false</tt>.</p></div>
<div class="para"><p></p></div>
<div class="para"><p><tt>default_form_builder</tt> tells Rails which form builder to use by default. The default is <tt>ActionView::Helpers::FormBuilder</tt>.</p></div>
<div class="para"><p>The ERB template handler supplies one additional option:</p></div>
<div class="para"><p><tt>ActionView::TemplateHandlers::ERB.erb_trim_mode</tt> gives the trim mode to be used by ERB. It defaults to <tt><em>-</em></tt>.</p></div>
<h3 id="_configuring_action_mailer">4.4. Configuring Action Mailer</h3>
<div class="para"><p>There are a number of settings available on <tt>ActionMailer::Base</tt>:</p></div>
<h3 id="_configuring_active_resource">4.5. Configuring Active Resource</h3>
<h3 id="_configuring_active_support">4.6. Configuring Active Support</h3>
</div>
<h2 id="_using_initializers">5. Using Initializers</h2>
<div class="sectionbody">
<div class="literalblock">
<div class="content">
<pre><tt>organization, controlling load order</tt></pre>
</div></div>
</div>
<h2 id="_using_an_after_initializer">6. Using an After-Initializer</h2>
<div class="sectionbody">
</div>
<h2 id="_rails_environment_settings">7. Rails Environment Settings</h2>
<div class="sectionbody">
<div class="para"><p>ENV</p></div>
</div>
<h2 id="_changelog">8. Changelog</h2>
<div class="sectionbody">
<div class="para"><p><a href="http://rails.lighthouseapp.com/projects/16213-rails-guides/tickets/28">Lighthouse ticket</a></p></div>
<div class="ilist"><ul>
<li>
<p>
November 5, 2008: Rough outline by <a href="../authors.html#mgunderloy">Mike Gunderloy</a>
</p>
</li>
</ul></div>
<div class="para"><p>actionmailer/lib/action_mailer/base.rb
257:    cattr_accessor :logger
267:    cattr_accessor :smtp_settings
273:    cattr_accessor :sendmail_settings
276:    cattr_accessor :raise_delivery_errors
282:    cattr_accessor :perform_deliveries
285:    cattr_accessor :deliveries
288:    cattr_accessor :default_charset
291:    cattr_accessor :default_content_type
294:    cattr_accessor :default_mime_version
297:    cattr_accessor :default_implicit_parts_order
299:    cattr_reader :protected_instance_variables</p></div>
<div class="para"><p>actionmailer/Rakefile
36:  rdoc.options &lt;&lt; <em>&#8212;line-numbers</em> &lt;&lt; <em>&#8212;inline-source</em> &lt;&lt; <em>-A cattr_accessor=object</em></p></div>
<div class="para"><p>actionpack/lib/action_controller/base.rb
263:    cattr_reader :protected_instance_variables
273:    cattr_accessor :asset_host
279:    cattr_accessor :consider_all_requests_local
285:    cattr_accessor :allow_concurrency
317:    cattr_accessor :param_parsers
321:    cattr_accessor :default_charset
325:    cattr_accessor :logger
329:    cattr_accessor :resource_action_separator
333:    cattr_accessor :resources_path_names
337:    cattr_accessor :request_forgery_protection_token
341:    cattr_accessor :optimise_named_routes
351:    cattr_accessor :use_accept_header
361:    cattr_accessor :relative_url_root</p></div>
<div class="para"><p>actionpack/lib/action_controller/caching/pages.rb
55:          cattr_accessor :page_cache_directory
58:          cattr_accessor :page_cache_extension</p></div>
<div class="para"><p>actionpack/lib/action_controller/caching.rb
37:        cattr_reader :cache_store
48:        cattr_accessor :perform_caching</p></div>
<div class="para"><p>actionpack/lib/action_controller/dispatcher.rb
98:    cattr_accessor :error_file_path</p></div>
<div class="para"><p>actionpack/lib/action_controller/mime_type.rb
24:    cattr_reader :html_types, :unverifiable_types</p></div>
<div class="para"><p>actionpack/lib/action_controller/rescue.rb
36:      base.cattr_accessor :rescue_responses
40:      base.cattr_accessor :rescue_templates</p></div>
<div class="para"><p>actionpack/lib/action_controller/session/active_record_store.rb
60:        cattr_accessor :data_column_name
170:        cattr_accessor :connection
173:        cattr_accessor :table_name
177:        cattr_accessor :session_id_column
181:        cattr_accessor :data_column
282:      cattr_accessor :session_class</p></div>
<div class="para"><p>actionpack/lib/action_controller/vendor/html-scanner/html/sanitizer.rb
44:    cattr_accessor :included_tags, :instance_writer &#8658; false</p></div>
<div class="para"><p>actionpack/lib/action_view/base.rb
189:    cattr_accessor :debug_rjs
193:    cattr_accessor :warn_cache_misses</p></div>
<div class="para"><p>actionpack/lib/action_view/helpers/active_record_helper.rb
7:    cattr_accessor :field_error_proc</p></div>
<div class="para"><p>actionpack/lib/action_view/helpers/form_helper.rb
805:    cattr_accessor :default_form_builder</p></div>
<div class="para"><p>actionpack/lib/action_view/template_handlers/erb.rb
47:      cattr_accessor :erb_trim_mode</p></div>
<div class="para"><p>actionpack/test/active_record_unit.rb
5:  cattr_accessor :able_to_connect
6:  cattr_accessor :connected</p></div>
<div class="para"><p>actionpack/test/controller/filters_test.rb
286:    cattr_accessor :execution_log</p></div>
<div class="para"><p>actionpack/test/template/form_options_helper_test.rb
3:TZInfo::Timezone.cattr_reader :loaded_zones</p></div>
<div class="para"><p>activemodel/lib/active_model/errors.rb
28:    cattr_accessor :default_error_messages</p></div>
<div class="para"><p>activemodel/Rakefile
19:  rdoc.options &lt;&lt; <em>&#8212;line-numbers</em> &lt;&lt; <em>&#8212;inline-source</em> &lt;&lt; <em>-A cattr_accessor=object</em></p></div>
<div class="para"><p>activerecord/lib/active_record/attribute_methods.rb
9:      base.cattr_accessor :attribute_types_cached_by_default, :instance_writer &#8658; false
11:      base.cattr_accessor :time_zone_aware_attributes, :instance_writer &#8658; false</p></div>
<div class="para"><p>activeresource/lib/active_resource/base.rb
206:    cattr_accessor :logger</p></div>
<div class="para"><p>activeresource/Rakefile
43:  rdoc.options &lt;&lt; <em>&#8212;line-numbers</em> &lt;&lt; <em>&#8212;inline-source</em> &lt;&lt; <em>-A cattr_accessor=object</em></p></div>
<div class="para"><p>activesupport/lib/active_support/buffered_logger.rb
17:    cattr_accessor :silencer</p></div>
<div class="para"><p>activesupport/lib/active_support/cache.rb
81:      cattr_accessor :logger</p></div>
<div class="para"><p>activesupport/lib/active_support/core_ext/class/attribute_accessors.rb
5:#    cattr_accessor :hair_colors
10:  def cattr_reader(*syms)
29:  def cattr_writer(*syms)
50:  def cattr_accessor(*syms)
51:    cattr_reader(*syms)
52:    cattr_writer(*syms)</p></div>
<div class="para"><p>activesupport/lib/active_support/core_ext/logger.rb
34:  cattr_accessor :silencer</p></div>
<div class="para"><p>activesupport/test/core_ext/class/attribute_accessor_test.rb
6:      cattr_accessor :foo
7:      cattr_accessor :bar, :instance_writer &#8658; false</p></div>
<div class="para"><p>activesupport/test/core_ext/module/synchronization_test.rb
6:    @target.cattr_accessor :mutex, :instance_writer &#8658; false</p></div>
<div class="para"><p>railties/doc/guides/html/creating_plugins.html
786:      cattr_accessor &lt;span style="color: #990000"&gt;:&lt;/span&gt;yaffle_text_field&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;:&lt;/span&gt;yaffle_date_field
860:      cattr_accessor &lt;span style="color: #990000"&gt;:&lt;/span&gt;yaffle_text_field&lt;span style="color: #990000"&gt;,&lt;/span&gt; &lt;span style="color: #990000"&gt;:&lt;/span&gt;yaffle_date_field</p></div>
<div class="para"><p>railties/lib/rails_generator/base.rb
93:      cattr_accessor :logger</p></div>
<div class="para"><p>railties/Rakefile
265:  rdoc.options &lt;&lt; <em>&#8212;line-numbers</em> &lt;&lt; <em>&#8212;inline-source</em> &lt;&lt; <em>&#8212;accessor</em> &lt;&lt; <em>cattr_accessor=object</em></p></div>
<div class="para"><p>railties/test/rails_info_controller_test.rb
12:    cattr_accessor :local_request</p></div>
<div class="para"><p>Rakefile
32:  rdoc.options &lt;&lt; <em>-A cattr_accessor=object</em></p></div>
<div class="qlist"><ol>
<li>
<p><em>
need to look for def self. ?
</em></p>
</li>
</ol></div>
</div>

		</div>
	</div>
</body>
</html>