Avoid calls to Rails::Application since this is not the official API.
Your application should *always* reference your application const (as Blog::Application) and Rails.application should be used just internally.
This commit is contained in:
parent
9024545a6b
commit
53b34e8476
|
@ -167,7 +167,7 @@ module ActionDispatch
|
|||
#
|
||||
# You can reload routes if you feel you must:
|
||||
#
|
||||
# Rails::Application.reload_routes!
|
||||
# Rails.application.reload_routes!
|
||||
#
|
||||
# This will clear all named routes and reload routes.rb if the file has been modified from
|
||||
# last load. To absolutely force reloading, use <tt>reload!</tt>.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
namespace :db do
|
||||
task :load_config => :rails_env do
|
||||
require 'active_record'
|
||||
ActiveRecord::Base.configurations = Rails::Application.config.database_configuration
|
||||
ActiveRecord::Base.configurations = Rails.application.config.database_configuration
|
||||
end
|
||||
|
||||
namespace :create do
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
module ActiveSupport
|
||||
# This class is responsible to track files and invoke the given block
|
||||
# whenever one of these files are changed. For example, this class
|
||||
# is used by Rails to reload routes whenever they are changed upon
|
||||
# a new request.
|
||||
# is used by Rails to reload the I18n framework whenever they are
|
||||
# changed upon a new request.
|
||||
#
|
||||
# routes_reloader = ActiveSupport::FileUpdateChecker.new(paths) do
|
||||
# paths.each { |p| load(p) }
|
||||
# Rails::Application.routes.reload!
|
||||
# i18n_reloader = ActiveSupport::FileUpdateChecker.new(paths) do
|
||||
# I18n.reload!
|
||||
# end
|
||||
#
|
||||
# ActionDispatch::Callbacks.to_prepare do
|
||||
# routes_reloader.execute_if_updated
|
||||
# i18n_reloader.execute_if_updated
|
||||
# end
|
||||
#
|
||||
class FileUpdateChecker
|
||||
|
|
|
@ -11,7 +11,7 @@ This guide first describes the process of +rails server+ then explains the Passe
|
|||
|
||||
h3. Launch!
|
||||
|
||||
As of Rails 3, +script/server+ has become +rails server+. This was done to centralise all rails related commands to one common file.
|
||||
As of Rails 3, +script/server+ has become +rails server+. This was done to centralize all rails related commands to one common file.
|
||||
|
||||
The actual +rails+ command is kept in _railties/bin/rails_ and goes like this:
|
||||
|
||||
|
@ -58,11 +58,8 @@ In +script/rails+ we see the following:
|
|||
#!/usr/bin/env ruby
|
||||
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
||||
|
||||
ENV_PATH = File.expand_path('../../config/environment', __FILE__)
|
||||
BOOT_PATH = File.expand_path('../../config/boot', __FILE__)
|
||||
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
||||
|
||||
require BOOT_PATH
|
||||
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
||||
require File.expand_path('../../config/boot', __FILE__)
|
||||
require 'rails/commands'
|
||||
</ruby>
|
||||
|
||||
|
@ -79,15 +76,19 @@ h3. _config/boot.rb_
|
|||
_config/boot.rb_ is the first stop for everything for initializing your application. This boot process does quite a bit of work for you and so this section attempts to go in-depth enough to explain what each of the pieces does.
|
||||
|
||||
<ruby>
|
||||
# Use Bundler (preferred)
|
||||
require 'rubygems'
|
||||
|
||||
# Set up gems listed in the Gemfile.
|
||||
gemfile = File.expand_path('../../Gemfile', __FILE__)
|
||||
begin
|
||||
require File.expand_path('../../.bundle/environment', __FILE__)
|
||||
rescue LoadError
|
||||
require 'rubygems'
|
||||
ENV['BUNDLE_GEMFILE'] = gemfile
|
||||
require 'bundler'
|
||||
Bundler.setup
|
||||
end
|
||||
|
||||
rescue Bundler::GemNotFound => e
|
||||
STDERR.puts e.message
|
||||
STDERR.puts "Try running `bundle install`."
|
||||
exit!
|
||||
end if File.exist?(gemfile)
|
||||
</ruby>
|
||||
|
||||
h3. Bundled Rails (3.x)
|
||||
|
@ -164,33 +165,7 @@ TODO: Prettify when it becomes more stable.
|
|||
|
||||
I won't go into what each of these gems are, as that is really something that needs covering on a case-by-case basis. We will however just dig a little under the surface of Bundler.
|
||||
|
||||
Back in _config/boot.rb_, the first line will try to include _.bundle/environment.rb_, which doesn't exist in a bare-bones Rails application and because this file does not exist Ruby will raise a +LoadError+ which will be rescued and run the following code:
|
||||
|
||||
<ruby>
|
||||
require 'rubygems'
|
||||
require 'bundler'
|
||||
Bundler.setup
|
||||
</ruby>
|
||||
|
||||
+Bundler.setup+ here will load and parse the +Gemfile+ and add the _lib_ directory of the gems mentioned **and** their dependencies (**and** their dependencies' dependencies, and so on) to the +$LOAD_PATH+.
|
||||
|
||||
Now we will go down the alternate timeline where we generate a _.bundle/environment.rb_ file using the +bundle lock+ command. This command also creates a _Gemfile.lock_ file which is actually a YAML file loaded by this method in Bundler before it moves on to check for _Gemfile_:
|
||||
|
||||
<ruby>
|
||||
def definition(gemfile = default_gemfile)
|
||||
configure
|
||||
root = Pathname.new(gemfile).dirname
|
||||
lockfile = root.join("Gemfile.lock")
|
||||
if lockfile.exist?
|
||||
Definition.from_lock(lockfile)
|
||||
else
|
||||
Definition.from_gemfile(gemfile)
|
||||
end
|
||||
end
|
||||
</ruby>
|
||||
|
||||
|
||||
The _.bundle/environment.rb_ file adds the _lib_ directory of all the gems specified in +Gemfile.lock+ to +$LOAD_PATH+.
|
||||
Back in _config/boot.rb_, we call +Bundler.setup+ which will load and parse the +Gemfile+ and add the _lib_ directory of the gems mentioned **and** their dependencies (**and** their dependencies' dependencies, and so on) to the +$LOAD_PATH+.
|
||||
|
||||
h3. Requiring Rails
|
||||
|
||||
|
@ -326,6 +301,11 @@ As you can see for the duration of the +eager_autoload+ block the class variable
|
|||
module ActiveSupport
|
||||
extend ActiveSupport::Autoload
|
||||
|
||||
autoload :DescendantsTracker
|
||||
autoload :FileUpdateChecker
|
||||
autoload :LogSubscriber
|
||||
autoload :Notifications
|
||||
|
||||
# TODO: Narrow this list down
|
||||
eager_autoload do
|
||||
autoload :BacktraceCleaner
|
||||
|
@ -348,7 +328,6 @@ As you can see for the duration of the +eager_autoload+ block the class variable
|
|||
autoload :OptionMerger
|
||||
autoload :OrderedHash
|
||||
autoload :OrderedOptions
|
||||
autoload :Notifications
|
||||
autoload :Rescuable
|
||||
autoload :SecureRandom
|
||||
autoload :StringInquirer
|
||||
|
@ -589,19 +568,20 @@ This file (_railties/lib/rails.rb_) requires the very, very basics that Rails ne
|
|||
require 'action_dispatch/railtie'
|
||||
</ruby>
|
||||
|
||||
+require 'pathname'+ requires the Pathname class which is used for returning a Pathname object for +Rails.root+ so that instead of doing:
|
||||
|
||||
<ruby>
|
||||
File.join(Rails.root, "app/controllers")
|
||||
</ruby>
|
||||
|
||||
You may do:
|
||||
+require 'pathname'+ requires the Pathname class which is used for returning a Pathname object for +Rails.root+. Although is coming to use this path name to generate paths as below:
|
||||
|
||||
<ruby>
|
||||
Rails.root.join("app/controllers")
|
||||
</ruby>
|
||||
|
||||
Although this is not new to Rails 3 (it was available in 2.3.5), it is something worthwhile pointing out.
|
||||
Pathname can also be converted to string, so the following syntax is preferred:
|
||||
|
||||
<ruby>
|
||||
"#{Rails.root}/app/controllers"
|
||||
</ruby>
|
||||
|
||||
|
||||
This works because Ruby automatically handles file path conversions. Although this is not new to Rails 3 (it was available in 2.3.5), it is something worthwhile pointing out.
|
||||
|
||||
Inside this file there are other helpful helper methods defined, such as +Rails.root+, +Rails.env+, +Rails.logger+ and +Rails.application+.
|
||||
|
||||
|
@ -1833,7 +1813,7 @@ We do not already have a +Rails.application+, so instead this resorts to calling
|
|||
end
|
||||
</ruby>
|
||||
|
||||
This +called_from+ setting looks a little overwhelming to begin with, but the short end of it is that it returns the route to your application's config directory, something like: _/home/you/yourapp/config_. After +called_from+ has been set, +super+ is again called and this means the +Rails::Railtie#inherited+ method (in _railties/lib/rails/railtie.rb_):
|
||||
This +called_from+ setting looks a little overwhelming to begin with, but the short end of it is that it returns your application's root, something like: _/home/you/yourapp_. After +called_from+ has been set, +super+ is again called and this means the +Rails::Railtie#inherited+ method (in _railties/lib/rails/railtie.rb_):
|
||||
|
||||
<ruby>
|
||||
def inherited(base)
|
||||
|
|
|
@ -8,14 +8,6 @@ module Rails
|
|||
# In Rails 3.0, a Rails::Application object was introduced which is nothing more than
|
||||
# an Engine but with the responsibility of coordinating the whole boot process.
|
||||
#
|
||||
# Opposite to Rails::Engine, you can only have one Rails::Application instance
|
||||
# in your process and both Rails::Application and YourApplication::Application
|
||||
# points to it.
|
||||
#
|
||||
# In other words, Rails::Application is Singleton and whenever you are accessing
|
||||
# Rails::Application.config or YourApplication::Application.config, you are actually
|
||||
# accessing YourApplication::Application.instance.config.
|
||||
#
|
||||
# == Initialization
|
||||
#
|
||||
# Rails::Application is responsible for executing all railties, engines and plugin
|
||||
|
@ -57,6 +49,10 @@ module Rails
|
|||
|
||||
def instance
|
||||
if self == Rails::Application
|
||||
if Rails.application
|
||||
ActiveSupport::Deprecation.warn "Calling a method in Rails::Application is deprecated, " <<
|
||||
"please call it directly in your application constant #{Rails.application.class.name}.", caller
|
||||
end
|
||||
Rails.application
|
||||
else
|
||||
@@instance ||= new
|
||||
|
|
|
@ -13,27 +13,27 @@ command = aliases[command] || command
|
|||
case command
|
||||
when 'generate', 'destroy', 'plugin', 'benchmarker', 'profiler'
|
||||
require APP_PATH
|
||||
Rails::Application.require_environment!
|
||||
Rails.application.require_environment!
|
||||
require "rails/commands/#{command}"
|
||||
|
||||
when 'console'
|
||||
require 'rails/commands/console'
|
||||
require APP_PATH
|
||||
Rails::Application.require_environment!
|
||||
Rails::Console.start(Rails::Application)
|
||||
Rails.application.require_environment!
|
||||
Rails::Console.start(Rails.application)
|
||||
|
||||
when 'server'
|
||||
require 'rails/commands/server'
|
||||
Rails::Server.new.tap { |server|
|
||||
require APP_PATH
|
||||
Dir.chdir(Rails::Application.root)
|
||||
Dir.chdir(Rails.application.root)
|
||||
server.start
|
||||
}
|
||||
|
||||
when 'dbconsole'
|
||||
require 'rails/commands/dbconsole'
|
||||
require APP_PATH
|
||||
Rails::DBConsole.start(Rails::Application)
|
||||
Rails::DBConsole.start(Rails.application)
|
||||
|
||||
when 'application', 'runner'
|
||||
require "rails/commands/#{command}"
|
||||
|
|
|
@ -37,7 +37,7 @@ ARGV.delete(code_or_file)
|
|||
ENV["RAILS_ENV"] = options[:environment]
|
||||
|
||||
require APP_PATH
|
||||
Rails::Application.require_environment!
|
||||
Rails.application.require_environment!
|
||||
|
||||
begin
|
||||
if code_or_file.nil?
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
require File.expand_path('../config/application', __FILE__)
|
||||
require 'rake'
|
||||
|
||||
Rails::Application.load_tasks
|
||||
<%= app_const %>.load_tasks
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
# If you change this key, all old signed cookies will become invalid!
|
||||
# Make sure the secret is at least 30 characters and all random,
|
||||
# no regular words or you'll be exposed to dictionary attacks.
|
||||
Rails.application.config.secret_token = '<%= app_secret %>'
|
||||
<%= app_const %>.config.secret_token = '<%= app_secret %>'
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Be sure to restart your server when you modify this file.
|
||||
|
||||
Rails.application.config.session_store :cookie_store, :key => '_<%= app_name %>_session'
|
||||
<%= app_const %>.config.session_store :cookie_store, :key => '_<%= app_name %>_session'
|
||||
|
||||
# Use the database for sessions instead of the cookie-based default,
|
||||
# which shouldn't be used to store highly confidential information
|
||||
# (create the session table with "rake db:sessions:create")
|
||||
# Rails.application.config.session_store :active_record_store
|
||||
# <%= app_const %>.config.session_store :active_record_store
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Rails.application.routes.draw do |map|
|
||||
Rails.application.routes.draw do
|
||||
match '/rails/info/properties' => "rails/info#properties"
|
||||
end
|
||||
|
|
|
@ -3,5 +3,5 @@ task :middleware => :environment do
|
|||
Rails.configuration.middleware.each do |middleware|
|
||||
puts "use #{middleware.inspect}"
|
||||
end
|
||||
puts "run #{Rails::Application.instance.class.name}.routes"
|
||||
puts "run #{Rails.application.class.name}.routes"
|
||||
end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
desc 'Print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.'
|
||||
task :routes => :environment do
|
||||
Rails::Application.reload_routes!
|
||||
Rails.application.reload_routes!
|
||||
all_routes = ENV['CONTROLLER'] ? Rails.application.routes.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } : Rails.application.routes.routes
|
||||
routes = all_routes.collect do |route|
|
||||
# TODO: The :index method is deprecated in 1.9 in favor of :key
|
||||
|
|
|
@ -36,7 +36,7 @@ module ApplicationTests
|
|||
|
||||
test "allows me to configure default url options for ActionMailer" do
|
||||
app_file "config/environments/development.rb", <<-RUBY
|
||||
Rails::Application.configure do
|
||||
AppTemplate::Application.configure do
|
||||
config.action_mailer.default_url_options = { :host => "test.rails" }
|
||||
end
|
||||
RUBY
|
||||
|
|
|
@ -16,7 +16,7 @@ module ApplicationTests
|
|||
end
|
||||
|
||||
def app
|
||||
@app ||= Rails::Application
|
||||
@app ||= Rails.application
|
||||
end
|
||||
|
||||
def assert_fallbacks(fallbacks)
|
||||
|
|
|
@ -24,11 +24,11 @@ module ApplicationTests
|
|||
app_file "config/environment.rb", <<-RUBY
|
||||
SuperMiddleware = Struct.new(:app)
|
||||
|
||||
Rails::Application.configure do
|
||||
AppTemplate::Application.configure do
|
||||
config.middleware.use SuperMiddleware
|
||||
end
|
||||
|
||||
Rails::Application.initialize!
|
||||
AppTemplate::Application.initialize!
|
||||
RUBY
|
||||
|
||||
assert_match "SuperMiddleware", Dir.chdir(app_path){ `rake middleware` }
|
||||
|
|
|
@ -11,7 +11,7 @@ class InfoControllerTest < ActionController::TestCase
|
|||
tests Rails::InfoController
|
||||
|
||||
def setup
|
||||
Rails.application.routes.draw do |map|
|
||||
Rails.application.routes.draw do
|
||||
match '/rails/info/properties' => "rails/info#properties"
|
||||
end
|
||||
@controller.stubs(:consider_all_requests_local? => false, :local_request? => true)
|
||||
|
|
Loading…
Reference in New Issue