aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-07-01 17:07:48 +0200
committerJosé Valim <jose.valim@gmail.com>2010-07-01 18:43:44 +0200
commit53b34e84762b7f2d6b641f99dadbb1eab42907ab (patch)
tree8cb0dd04053a43f2bb9367a672e81061fb2f7fa0
parent9024545a6b019e3a2596a4194e84e77963e31b05 (diff)
downloadrails-53b34e84762b7f2d6b641f99dadbb1eab42907ab.tar.gz
rails-53b34e84762b7f2d6b641f99dadbb1eab42907ab.tar.bz2
rails-53b34e84762b7f2d6b641f99dadbb1eab42907ab.zip
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.
-rw-r--r--actionpack/lib/action_dispatch/routing.rb2
-rw-r--r--activerecord/lib/active_record/railties/databases.rake2
-rw-r--r--activesupport/lib/active_support/file_update_checker.rb11
-rw-r--r--railties/guides/source/initialization.textile72
-rw-r--r--railties/lib/rails/application.rb12
-rw-r--r--railties/lib/rails/commands.rb10
-rw-r--r--railties/lib/rails/commands/runner.rb2
-rw-r--r--railties/lib/rails/generators/rails/app/templates/Rakefile2
-rw-r--r--railties/lib/rails/generators/rails/app/templates/config/initializers/secret_token.rb.tt2
-rw-r--r--railties/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt4
-rw-r--r--railties/lib/rails/info_routes.rb2
-rw-r--r--railties/lib/rails/tasks/middleware.rake2
-rw-r--r--railties/lib/rails/tasks/routes.rake2
-rw-r--r--railties/test/application/initializers/frameworks_test.rb2
-rw-r--r--railties/test/application/initializers/i18n_test.rb2
-rw-r--r--railties/test/application/rake_test.rb4
-rw-r--r--railties/test/rails_info_controller_test.rb2
17 files changed, 55 insertions, 80 deletions
diff --git a/actionpack/lib/action_dispatch/routing.rb b/actionpack/lib/action_dispatch/routing.rb
index 401d98b663..89007fab74 100644
--- a/actionpack/lib/action_dispatch/routing.rb
+++ b/actionpack/lib/action_dispatch/routing.rb
@@ -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>.
diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake
index 7882f05d07..5024787c3c 100644
--- a/activerecord/lib/active_record/railties/databases.rake
+++ b/activerecord/lib/active_record/railties/databases.rake
@@ -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
diff --git a/activesupport/lib/active_support/file_update_checker.rb b/activesupport/lib/active_support/file_update_checker.rb
index 5f5b264eb9..cd658fe173 100644
--- a/activesupport/lib/active_support/file_update_checker.rb
+++ b/activesupport/lib/active_support/file_update_checker.rb
@@ -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
diff --git a/railties/guides/source/initialization.textile b/railties/guides/source/initialization.textile
index e458413b35..cedf823bdc 100644
--- a/railties/guides/source/initialization.textile
+++ b/railties/guides/source/initialization.textile
@@ -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:
++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>
- File.join(Rails.root, "app/controllers")
+ Rails.root.join("app/controllers")
</ruby>
-You may do:
+Pathname can also be converted to string, so the following syntax is preferred:
<ruby>
- Rails.root.join("app/controllers")
+ "#{Rails.root}/app/controllers"
</ruby>
-Although this is not new to Rails 3 (it was available in 2.3.5), it is something worthwhile pointing out.
+
+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)
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb
index 4a7ed2d028..f61103c764 100644
--- a/railties/lib/rails/application.rb
+++ b/railties/lib/rails/application.rb
@@ -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
diff --git a/railties/lib/rails/commands.rb b/railties/lib/rails/commands.rb
index aad1170b56..b9353ba336 100644
--- a/railties/lib/rails/commands.rb
+++ b/railties/lib/rails/commands.rb
@@ -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}"
diff --git a/railties/lib/rails/commands/runner.rb b/railties/lib/rails/commands/runner.rb
index b97ff086b6..c43a233bc3 100644
--- a/railties/lib/rails/commands/runner.rb
+++ b/railties/lib/rails/commands/runner.rb
@@ -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?
diff --git a/railties/lib/rails/generators/rails/app/templates/Rakefile b/railties/lib/rails/generators/rails/app/templates/Rakefile
index 13f1f9fa41..d83cafc3be 100644
--- a/railties/lib/rails/generators/rails/app/templates/Rakefile
+++ b/railties/lib/rails/generators/rails/app/templates/Rakefile
@@ -4,4 +4,4 @@
require File.expand_path('../config/application', __FILE__)
require 'rake'
-Rails::Application.load_tasks
+<%= app_const %>.load_tasks
diff --git a/railties/lib/rails/generators/rails/app/templates/config/initializers/secret_token.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/initializers/secret_token.rb.tt
index 22aa576f5d..a3143f1346 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/initializers/secret_token.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/initializers/secret_token.rb.tt
@@ -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 %>'
diff --git a/railties/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt
index a869a21e2c..0aed79bb70 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt
@@ -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
diff --git a/railties/lib/rails/info_routes.rb b/railties/lib/rails/info_routes.rb
index bd58034d8f..b5c4e4c1e0 100644
--- a/railties/lib/rails/info_routes.rb
+++ b/railties/lib/rails/info_routes.rb
@@ -1,3 +1,3 @@
-Rails.application.routes.draw do |map|
+Rails.application.routes.draw do
match '/rails/info/properties' => "rails/info#properties"
end
diff --git a/railties/lib/rails/tasks/middleware.rake b/railties/lib/rails/tasks/middleware.rake
index e670989345..cd35ffb19a 100644
--- a/railties/lib/rails/tasks/middleware.rake
+++ b/railties/lib/rails/tasks/middleware.rake
@@ -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
diff --git a/railties/lib/rails/tasks/routes.rake b/railties/lib/rails/tasks/routes.rake
index 41619bc1f8..a99232c4be 100644
--- a/railties/lib/rails/tasks/routes.rake
+++ b/railties/lib/rails/tasks/routes.rake
@@ -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
diff --git a/railties/test/application/initializers/frameworks_test.rb b/railties/test/application/initializers/frameworks_test.rb
index 7269a7c5a8..b1deb7a645 100644
--- a/railties/test/application/initializers/frameworks_test.rb
+++ b/railties/test/application/initializers/frameworks_test.rb
@@ -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
diff --git a/railties/test/application/initializers/i18n_test.rb b/railties/test/application/initializers/i18n_test.rb
index a1fcba3310..4baa8a8170 100644
--- a/railties/test/application/initializers/i18n_test.rb
+++ b/railties/test/application/initializers/i18n_test.rb
@@ -16,7 +16,7 @@ module ApplicationTests
end
def app
- @app ||= Rails::Application
+ @app ||= Rails.application
end
def assert_fallbacks(fallbacks)
diff --git a/railties/test/application/rake_test.rb b/railties/test/application/rake_test.rb
index 40fb446b16..d6e100ffe3 100644
--- a/railties/test/application/rake_test.rb
+++ b/railties/test/application/rake_test.rb
@@ -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` }
diff --git a/railties/test/rails_info_controller_test.rb b/railties/test/rails_info_controller_test.rb
index aa76979c27..687c2d1568 100644
--- a/railties/test/rails_info_controller_test.rb
+++ b/railties/test/rails_info_controller_test.rb
@@ -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)