2005-09-03 15:13:06 +00:00
desc " Migrate the database according to the migrate scripts in db/migrate (only supported on PG/MySQL). A specific version can be targetted with VERSION=x "
task :migrate = > :environment do
2005-09-03 16:22:28 +00:00
ActiveRecord :: Migrator . migrate ( " #{ RAILS_ROOT } /db/migrate/ " , ENV [ " VERSION " ] ? ENV [ " VERSION " ] . to_i : nil )
2005-09-03 15:13:06 +00:00
end
desc " Load fixtures into the current environment's database "
task :load_fixtures = > :environment do
require 'active_record/fixtures'
ActiveRecord :: Base . establish_connection ( RAILS_ENV . to_sym )
Dir . glob ( File . join ( RAILS_ROOT , 'test' , 'fixtures' , '*.yml' ) ) . each do | fixture_file |
Fixtures . create_fixtures ( 'test/fixtures' , File . basename ( fixture_file , '.*' ) )
end
end
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
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 `
when " sqlserver "
` osql -E -S #{ abcs [ " test " ] [ " host " ] } -d #{ abcs [ " test " ] [ " database " ] } -i db \\ #{ RAILS_ENV } _structure.sql `
when " oci " ,
ActiveRecord :: Base . establish_connection ( :test )
IO . readlines ( " db/ #{ RAILS_ENV } _structure.sql " ) . join . split ( " ; \n \n " ) . each do | ddl |
ActiveRecord :: Base . connection . execute ( ddl )
end
else
raise " Unknown database adapter ' #{ abcs [ " test " ] [ " adapter " ] } ' "
end
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 " , " oci "
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 `
when " sqlserver "
` scptxfr /s #{ abcs [ RAILS_ENV ] [ " host " ] } /d #{ abcs [ RAILS_ENV ] [ " database " ] } /I /f db \\ #{ RAILS_ENV } _structure.sql /q /A /r `
` scptxfr /s #{ abcs [ RAILS_ENV ] [ " host " ] } /d #{ abcs [ RAILS_ENV ] [ " database " ] } /I /F db \ /q /A /r `
else
raise " Unknown database adapter ' #{ abcs [ " test " ] [ " adapter " ] } ' "
end
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 " ] )
when " sqlserver "
dropfkscript = " #{ abcs [ " test " ] [ " host " ] } . #{ abcs [ " test " ] [ " database " ] } .DP1 " . gsub ( / \\ / , '-' )
` osql -E -S #{ abcs [ " test " ] [ " host " ] } -d #{ abcs [ " test " ] [ " database " ] } -i db \\ #{ dropfkscript } `
` osql -E -S #{ abcs [ " test " ] [ " host " ] } -d #{ abcs [ " test " ] [ " database " ] } -i db \\ #{ RAILS_ENV } _structure.sql `
when " oci "
ActiveRecord :: Base . establish_connection ( :test )
ActiveRecord :: Base . connection . structure_drop . split ( " ; \n \n " ) . each do | ddl |
ActiveRecord :: Base . connection . execute ( ddl )
end
else
raise " Unknown database adapter ' #{ abcs [ " test " ] [ " adapter " ] } ' "
end
end