diff options
Diffstat (limited to 'railties')
-rw-r--r-- | railties/CHANGELOG | 2 | ||||
-rwxr-xr-x | railties/fresh_rakefile | 136 |
2 files changed, 58 insertions, 80 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG index 401559f6a9..17505f12bf 100644 --- a/railties/CHANGELOG +++ b/railties/CHANGELOG @@ -1,7 +1,5 @@ *SVN* -* Added create_db and destroy_db tasks in the Rakefile to make it easier to load the dumped structure into the database #1587 [Sam Stephenson] - * Added an EXPERIMENTAL gateway.cgi for getting high-speed performance through vanilla CGI using a long-running, DRb-backed server in the background (using script/listener and script/tracker) #1603 [Nicholas Seckar] * Added migration generator: ./script/generate migration add_system_settings diff --git a/railties/fresh_rakefile b/railties/fresh_rakefile index 23f120ff49..46bb73ef86 100755 --- a/railties/fresh_rakefile +++ b/railties/fresh_rakefile @@ -30,33 +30,8 @@ def recent_tests(source_pattern, test_path, touched_since = 10.minutes.ago) end.compact end -def with_database(environment = RAILS_ENV) - config = ActiveRecord::Base.configurations[environment] - case config['adapter'] - when /mysql/ - ActiveRecord::Base.establish_connection(config) - ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0') - db = :mysql - when /postgresql/ - ENV['PGHOST'] = config['host'].to_s if config['host'] - ENV['PGPORT'] = config['port'].to_s if config['port'] - ENV['PGPASSWORD'] = config['password'].to_s if config['password'] - db = :postgresql - when /sqlite/ - db = :sqlite - else - raise "Unknown database adapter '#{config['adapter']}'" - end - schema = "db/schema-#{db}.sql" - yield(config, schema)[db].call -end - -task :test_environment do - ENV['RAILS_ENV'] = 'test' -end - desc 'Test recent changes.' -Rake::TestTask.new(:recent) do |t| +Rake::TestTask.new(:recent => [ :clone_structure_to_test ]) do |t| since = TEST_CHANGES_SINCE touched = FileList['test/**/*_test.rb'].select { |path| File.mtime(path) > since } + recent_tests('app/models/*.rb', 'test/unit', since) + @@ -66,26 +41,26 @@ Rake::TestTask.new(:recent) do |t| t.verbose = true t.test_files = touched.uniq end -task :test_recent => [:test_environment, :create_db] +task :test_recent => [ :clone_structure_to_test ] desc "Run the unit tests in test/unit" -Rake::TestTask.new(:test_units) { |t| +Rake::TestTask.new("test_units") { |t| t.libs << "test" t.pattern = 'test/unit/**/*_test.rb' t.verbose = true } -task :test_units => [:test_environment, :create_db] +task :test_units => [ :clone_structure_to_test ] desc "Run the functional tests in test/functional" -Rake::TestTask.new(:test_functional) { |t| +Rake::TestTask.new("test_functional") { |t| t.libs << "test" t.pattern = 'test/functional/**/*_test.rb' t.verbose = true } -task :test_functional => [:test_environment, :create_db] +task :test_functional => [ :clone_structure_to_test ] desc "Generate documentation for the application" -Rake::RDocTask.new(:appdoc) { |rdoc| +Rake::RDocTask.new("appdoc") { |rdoc| rdoc.rdoc_dir = 'doc/app' rdoc.title = "Rails Application Documentation" rdoc.options << '--line-numbers --inline-source' @@ -94,7 +69,7 @@ Rake::RDocTask.new(:appdoc) { |rdoc| } desc "Generate documentation for the Rails framework" -Rake::RDocTask.new(:apidoc) { |rdoc| +Rake::RDocTask.new("apidoc") { |rdoc| rdoc.rdoc_dir = 'doc/api' rdoc.template = "#{ENV['template']}.rb" if ENV['template'] rdoc.title = "Rails Framework Documentation" @@ -143,59 +118,64 @@ task :stats => [ :environment ] do ).to_s end -desc "Create the database for the current environment from the schema SQL" -task :create_db => :destroy_db do - with_database do |config, schema| - {:mysql => lambda do - IO.read(schema).split("\n\n").each do |table| +desc "Recreate the test databases from the development structure" +task :clone_structure_to_test => [ :db_structure_dump, :purge_test_database ] do + abcs = ActiveRecord::Base.configurations + case abcs["test"]["adapter"] + when "mysql" + ActiveRecord::Base.establish_connection(:test) + ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0') + IO.readlines("db/#{RAILS_ENV}_structure.sql").join.split("\n\n").each do |table| ActiveRecord::Base.connection.execute(table) end - end, - - :postgresql => lambda do - `createdb -T template0 -U "#{config['username']}" #{config['database']}` - `psql -U "#{config['username']}" -f #{schema} #{config['database']}` - end, - - :sqlite => lambda do - `#{config['adapter']} #{config['dbfile']} < #{schema}` - end} + when "postgresql" + ENV['PGHOST'] = abcs["test"]["host"] if abcs["test"]["host"] + ENV['PGPORT'] = abcs["test"]["port"].to_s if abcs["test"]["port"] + ENV['PGPASSWORD'] = abcs["test"]["password"].to_s if abcs["test"]["password"] + `psql -U "#{abcs["test"]["username"]}" -f db/#{RAILS_ENV}_structure.sql #{abcs["test"]["database"]}` + when "sqlite", "sqlite3" + `#{abcs[RAILS_ENV]["adapter"]} #{abcs["test"]["dbfile"]} < db/#{RAILS_ENV}_structure.sql` + else + raise "Unknown database adapter '#{abcs["test"]["adapter"]}'" end end -desc "Destroy the database for the current environment" -task :destroy_db => :environment do - with_database do |config, schema| - {:mysql => lambda do - ActiveRecord::Base.connection.execute("DROP DATABASE IF EXISTS #{config['database']}") - end, - - :postgresql => lambda do - `dropdb -U "#{config['username']}" #{config['database']}` - end, - - :sqlite => lambda do - rm_f config['dbfile'] - end} +desc "Dump the database structure to a SQL file" +task :db_structure_dump => :environment do + abcs = ActiveRecord::Base.configurations + case abcs[RAILS_ENV]["adapter"] + when "mysql" + ActiveRecord::Base.establish_connection(abcs[RAILS_ENV]) + File.open("db/#{RAILS_ENV}_structure.sql", "w+") { |f| f << ActiveRecord::Base.connection.structure_dump } + when "postgresql" + ENV['PGHOST'] = abcs[RAILS_ENV]["host"] if abcs[RAILS_ENV]["host"] + ENV['PGPORT'] = abcs[RAILS_ENV]["port"].to_s if abcs[RAILS_ENV]["port"] + ENV['PGPASSWORD'] = abcs[RAILS_ENV]["password"].to_s if abcs[RAILS_ENV]["password"] + `pg_dump -U "#{abcs[RAILS_ENV]["username"]}" -s -x -O -f db/#{RAILS_ENV}_structure.sql #{abcs[RAILS_ENV]["database"]}` + when "sqlite", "sqlite3" + `#{abcs[RAILS_ENV]["adapter"]} #{abcs[RAILS_ENV]["dbfile"]} .schema > db/#{RAILS_ENV}_structure.sql` + else + raise "Unknown database adapter '#{abcs["test"]["adapter"]}'" end end -desc "Extract the current environment's database structure into schema SQL" -task :extract_db_structure => :environment do - with_database do |config, schema| - {:mysql => lambda do - File.open(schema, 'w+') do |sql| - sql << ActiveRecord::Base.connection.structure_dump - end - end, - - :postgresql => lambda do - `pg_dump -U "#{config['username']}" -s -x -O -f #{schema} #{config['database']}` - end, - - :sqlite => lambda do - `#{config['adapter']} #{config['dbfile']} .schema > #{schema}` - end} +desc "Empty the test database" +task :purge_test_database => :environment do + abcs = ActiveRecord::Base.configurations + case abcs["test"]["adapter"] + when "mysql" + ActiveRecord::Base.establish_connection(:test) + ActiveRecord::Base.connection.recreate_database(abcs["test"]["database"]) + when "postgresql" + ENV['PGHOST'] = abcs["test"]["host"] if abcs["test"]["host"] + ENV['PGPORT'] = abcs["test"]["port"].to_s if abcs["test"]["port"] + ENV['PGPASSWORD'] = abcs["test"]["password"].to_s if abcs["test"]["password"] + `dropdb -U "#{abcs["test"]["username"]}" #{abcs["test"]["database"]}` + `createdb -T template0 -U "#{abcs["test"]["username"]}" #{abcs["test"]["database"]}` + when "sqlite","sqlite3" + File.delete(abcs["test"]["dbfile"]) if File.exist?(abcs["test"]["dbfile"]) + else + raise "Unknown database adapter '#{abcs["test"]["adapter"]}'" end end |