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.
* +root+: a path to the root of the application.
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
- #env ⇒ Object
- #fixtures_path ⇒ Object
- #migrations_paths ⇒ Object
- #root ⇒ Object
- #seed_loader ⇒ Object
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
- #drop(*arguments) ⇒ Object
- #drop_all ⇒ Object
- #drop_current(environment = env) ⇒ Object
- #load_schema(format = ActiveRecord::Base.schema_format, file = nil) ⇒ 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
77 78 79 80 81 82 83 84 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 77 def current_config( = {}) .reverse_merge! :env => env if .has_key?(:config) @current_config = [:config] else @current_config ||= ActiveRecord::Base.configurations[[:env]] end end |
#database_configuration ⇒ Object
Returns the value of attribute database_configuration
40 41 42 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 40 def database_configuration @database_configuration end |
#db_dir ⇒ Object
53 54 55 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 53 def db_dir @db_dir ||= Rails.application.config.paths["db"].first end |
#env ⇒ Object
69 70 71 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 69 def env @env ||= Rails.env end |
#fixtures_path ⇒ Object
61 62 63 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 61 def fixtures_path @fixtures_path ||= File.join(root, 'test', 'fixtures') end |
#migrations_paths ⇒ Object
57 58 59 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 57 def migrations_paths @migrations_paths ||= Rails.application.paths['db/migrate'].to_a end |
#root ⇒ Object
65 66 67 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 65 def root @root ||= Rails.root end |
#seed_loader ⇒ Object
73 74 75 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 73 def seed_loader @seed_loader ||= Rails.application end |
Instance Method Details
#charset(*arguments) ⇒ Object
129 130 131 132 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 129 def charset(*arguments) configuration = arguments.first class_for_adapter(configuration['adapter']).new(*arguments).charset end |
#charset_current(environment = env) ⇒ Object
125 126 127 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 125 def charset_current(environment = env) charset ActiveRecord::Base.configurations[environment] end |
#check_schema_file(filename) ⇒ Object
174 175 176 177 178 179 180 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 174 def check_schema_file(filename) unless File.exist?(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
138 139 140 141 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 138 def collation(*arguments) configuration = arguments.first class_for_adapter(configuration['adapter']).new(*arguments).collation end |
#collation_current(environment = env) ⇒ Object
134 135 136 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 134 def collation_current(environment = env) collation ActiveRecord::Base.configurations[environment] end |
#create(*arguments) ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 86 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
96 97 98 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 96 def create_all each_local_configuration { |configuration| create configuration } end |
#create_current(environment = env) ⇒ Object
100 101 102 103 104 105 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 100 def create_current(environment = env) each_current_configuration(environment) { |configuration| create configuration } ActiveRecord::Base.establish_connection(environment.to_sym) end |
#drop(*arguments) ⇒ Object
107 108 109 110 111 112 113 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 107 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
115 116 117 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 115 def drop_all each_local_configuration { |configuration| drop configuration } end |
#drop_current(environment = env) ⇒ Object
119 120 121 122 123 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 119 def drop_current(environment = env) each_current_configuration(environment) { |configuration| drop configuration } end |
#load_schema(format = ActiveRecord::Base.schema_format, file = nil) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 159 def load_schema(format = ActiveRecord::Base.schema_format, file = nil) case format when :ruby file ||= File.join(db_dir, "schema.rb") check_schema_file(file) load(file) when :sql file ||= File.join(db_dir, "structure.sql") check_schema_file(file) structure_load(current_config, file) else raise ArgumentError, "unknown format #{format.inspect}" end end |
#load_seed ⇒ Object
182 183 184 185 186 187 188 189 190 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 182 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
143 144 145 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 143 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
147 148 149 150 151 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 147 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
153 154 155 156 157 |
# File 'activerecord/lib/active_record/tasks/database_tasks.rb', line 153 def structure_load(*arguments) configuration = arguments.first filename = arguments.delete_at 1 class_for_adapter(configuration['adapter']).new(*arguments).structure_load(filename) end |