Module: ActiveRecord::Tasks::DatabaseTasks
- Extended by:
- DatabaseTasks
- Included in:
- DatabaseTasks
- Defined in:
- activerecord/lib/active_record/tasks/database_tasks.rb
Overview
ActiveRecord::Tasks::DatabaseTasks
is a utility class, which encapsulates logic behind common tasks used to manage database and migrations.
The tasks defined here are used in rake tasks provided by Active Record.
In order to use DatabaseTasks, a few config values need to be set. All the needed config values are set by Rails already, so it’s necessary to do it only if you want to change the defaults or when you want to use Active Record outside of Rails (in such case after configuring the database tasks, you can also use the rake tasks defined in Active Record).
The possible config values are:
* +env+: current environment (like Rails.env).
* +database_configuration+: configuration of your databases (as in +config/database.yml+).
* +db_dir+: your +db+ directory.
* +fixtures_path+: a path to fixtures directory.
* +migrations_paths+: a list of paths to directories with migrations.
* +seed_loader+: an object which will load seeds, it needs to respond to the +load_seed+ method.
Example usage of DatabaseTasks
outside Rails could look as such:
include ActiveRecord::Tasks
DatabaseTasks.database_configuration = YAML.load(File.read('my_database_config.yml'))
DatabaseTasks.db_dir = 'db'
# other settings...
DatabaseTasks.create_current('production')
Constant Summary collapse
- LOCAL_HOSTS =
['127.0.0.1', 'localhost']
Instance Attribute Summary collapse
- #current_config(options = {}) ⇒ Object
-
#database_configuration ⇒ Object
Returns the value of attribute database_configuration.
-
#db_dir ⇒ Object
Returns the value of attribute db_dir.
-
#env ⇒ Object
Returns the value of attribute env.
-
#fixtures_path ⇒ Object
Returns the value of attribute fixtures_path.
-
#migrations_paths ⇒ Object
Returns the value of attribute migrations_paths.
-
#seed_loader ⇒ Object
Returns the value of attribute seed_loader.
Instance Method Summary collapse
- #charset(*arguments) ⇒ Object
- #charset_current(environment = env) ⇒ Object
- #check_schema_file(filename) ⇒ Object
- #collation(*arguments) ⇒ Object
- #collation_current(environment = env) ⇒ Object
- #create(*arguments) ⇒ Object
- #create_all ⇒ Object
- #create_current(environment = env) ⇒ Object
- #create_database_url ⇒ Object
- #drop(*arguments) ⇒ Object
- #drop_all ⇒ Object
- #drop_current(environment = env) ⇒ Object
- #drop_database_url ⇒ Object
- #load_seed ⇒ Object
- #purge(configuration) ⇒ Object
- #register_task(pattern, task) ⇒ Object
- #structure_dump(*arguments) ⇒ Object
- #structure_load(*arguments) ⇒ Object
Instance Attribute Details
#current_config(options = {}) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 53 def current_config( = {}) .reverse_merge! :env => env if .has_key?(:config) @current_config = [:config] else @current_config ||= if ENV['DATABASE_URL'] database_url_config else ActiveRecord::Base.configurations[[:env]] end end end |
#database_configuration ⇒ Object
Returns the value of attribute database_configuration
39 40 41 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 39 def database_configuration @database_configuration end |
#db_dir ⇒ Object
Returns the value of attribute db_dir
39 40 41 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 39 def db_dir @db_dir end |
#env ⇒ Object
Returns the value of attribute env
39 40 41 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 39 def env @env end |
#fixtures_path ⇒ Object
Returns the value of attribute fixtures_path
39 40 41 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 39 def fixtures_path @fixtures_path end |
#migrations_paths ⇒ Object
Returns the value of attribute migrations_paths
39 40 41 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 39 def migrations_paths @migrations_paths end |
#seed_loader ⇒ Object
Returns the value of attribute seed_loader
39 40 41 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 39 def seed_loader @seed_loader end |
Instance Method Details
#charset(*arguments) ⇒ Object
117 118 119 120 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 117 def charset(*arguments) configuration = arguments.first class_for_adapter(configuration['adapter']).new(*arguments).charset end |
#charset_current(environment = env) ⇒ Object
113 114 115 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 113 def charset_current(environment = env) charset ActiveRecord::Base.configurations[environment] end |
#check_schema_file(filename) ⇒ Object
147 148 149 150 151 152 153 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 147 def check_schema_file(filename) unless File.exists?(filename) = %{#{filename} doesn't exist yet. Run `rake db:migrate` to create it, then try again.} << %{ If you do not intend to use a database, you should instead alter #{Rails.root}/config/application.rb to limit the frameworks that will be loaded.} if defined?(::Rails) Kernel.abort end end |
#collation(*arguments) ⇒ Object
126 127 128 129 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 126 def collation(*arguments) configuration = arguments.first class_for_adapter(configuration['adapter']).new(*arguments).collation end |
#collation_current(environment = env) ⇒ Object
122 123 124 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 122 def collation_current(environment = env) collation ActiveRecord::Base.configurations[environment] end |
#create(*arguments) ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 66 def create(*arguments) configuration = arguments.first class_for_adapter(configuration['adapter']).new(*arguments).create rescue DatabaseAlreadyExists $stderr.puts "#{configuration['database']} already exists" rescue Exception => error $stderr.puts error, *(error.backtrace) $stderr.puts "Couldn't create database for #{configuration.inspect}" end |
#create_all ⇒ Object
76 77 78 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 76 def create_all each_local_configuration { |configuration| create configuration } end |
#create_current(environment = env) ⇒ Object
80 81 82 83 84 85 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 80 def create_current(environment = env) each_current_configuration(environment) { |configuration| create configuration } ActiveRecord::Base.establish_connection environment end |
#create_database_url ⇒ Object
87 88 89 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 87 def create_database_url create database_url_config end |
#drop(*arguments) ⇒ Object
91 92 93 94 95 96 97 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 91 def drop(*arguments) configuration = arguments.first class_for_adapter(configuration['adapter']).new(*arguments).drop rescue Exception => error $stderr.puts error, *(error.backtrace) $stderr.puts "Couldn't drop #{configuration['database']}" end |
#drop_all ⇒ Object
99 100 101 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 99 def drop_all each_local_configuration { |configuration| drop configuration } end |
#drop_current(environment = env) ⇒ Object
103 104 105 106 107 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 103 def drop_current(environment = env) each_current_configuration(environment) { |configuration| drop configuration } end |
#drop_database_url ⇒ Object
109 110 111 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 109 def drop_database_url drop database_url_config end |
#load_seed ⇒ Object
155 156 157 158 159 160 161 162 163 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 155 def load_seed if seed_loader seed_loader.load_seed else raise "You tried to load seed data, but no seed loader is specified. Please specify seed " + "loader with ActiveRecord::Tasks::DatabaseTasks.seed_loader = your_seed_loader\n" + "Seed loader should respond to load_seed method" end end |
#purge(configuration) ⇒ Object
131 132 133 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 131 def purge(configuration) class_for_adapter(configuration['adapter']).new(configuration).purge end |
#register_task(pattern, task) ⇒ Object
44 45 46 47 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 44 def register_task(pattern, task) @tasks ||= {} @tasks[pattern] = task end |
#structure_dump(*arguments) ⇒ Object
135 136 137 138 139 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 135 def structure_dump(*arguments) configuration = arguments.first filename = arguments.delete_at 1 class_for_adapter(configuration['adapter']).new(*arguments).structure_dump(filename) end |
#structure_load(*arguments) ⇒ Object
141 142 143 144 145 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 141 def structure_load(*arguments) configuration = arguments.first filename = arguments.delete_at 1 class_for_adapter(configuration['adapter']).new(*arguments).structure_load(filename) end |