最終更新日: 2011年5月15日
・[WindowsとLinuxで同じRakefileを使用する] へ戻る
MySQL用Rakefileのサンプルです。
#
# For MySQL
#
namespace :mysql do
task :default => [:create, :migrate, :drop]
ENV_MYPASSWORD = "MYSQL_PWD"
ENV_MYDBNAME = "mysql_dbname"
def get_mysql_dbname()
if DBNAME && !DBNAME.empty? then
return DBNAME
elsif ENV.include?(ENV_MYDBNAME) then
return ENV[ENV_MYDBNAME]
else
puts "input database name"
dbname = STDIN.gets
ENV[ENV_MYDBNAME] = dbname.chop
return ENV[ENV_MYDBNAME]
end
end
ENV[ENV_MYPASSWORD] = PASSWORD
def get_mysql_password()
pass = ENV[ENV_MYPASSWORD]
if pass && !pass.empty? then
return pass
else
puts "input database password"
system "stty -echo"
pass = STDIN.gets
system "stty echo"
ENV[ENV_MYPASSWORD] = pass.chop
return ENV[ENV_MYPASSWORD]
end
end
desc "create database"
task :create do
dbname = get_mysql_dbname()
password = get_mysql_password()
sh "#{MYPATH}mysql -u #{MYUSER} -e \"create database #{dbname}\""
end
desc "drop database"
task :drop do
dbname = get_mysql_dbname()
password = get_mysql_password()
sh "#{MYPATH}mysql -u #{MYUSER} -e \"drop database #{dbname}\""
end
desc "migrate database"
task :migrate do
dbname = get_mysql_dbname()
password = get_mysql_password()
sh "#{MYPATH}mysql -u #{MYUSER} -D #{dbname} < #{MIGRATE_DDL}"
end
desc "show databases"
task :databases do
dbname = get_mysql_dbname()
password = get_mysql_password()
sh "#{MYPATH}mysql -u #{MYUSER} -e \"show databases;\""
end
def mysql_exec(q)
dbname = get_mysql_dbname()
password = get_mysql_password()
sh "#{MYPATH}mysql -u #{MYUSER} -D #{dbname} -e \"#{q}\""
end
desc "execute query (mysql:exec[\"QUERY\"])"
task :exec, "query" do |x, args|
mysql_exec(args.query)
end
desc "show tables"
task :tables do
mysql_exec("show tables")
end
desc "describe table (mysql:desc[TABLENAME])"
task :desc, "table_name" do |x, args|
mysql_exec("desc #{args.table_name}")
end
end
このRakefileではクエリーを実行するタスクexecがあります。 タスクexecでは指定したクエリーを指定データベースに対して実行します。
以下の例では対象データベースのテーブルを表示します。
# rake mysql:exec["show tables;"] (in /home/uname/ruby/rake) input database password select * from access; +---------------------+ | Tables_in_mydb_test | +---------------------+ | access | +---------------------+
以下のようにSELECTを実行することもできます。
# rake mysql:exec["select * from access;"] (in /home/uname/ruby/rake) input database password select * from access; mysql -u root -D mydb_test -e "select * from access;" +------+------+ | id | name | +------+------+ | 1 | aa | | 1 | abcd | +------+------+
データベースの一覧を表示することもできます。
# rake mysql:exec["show databases;"] (in /home/uname/ruby/rake) input database password show databases; mysql -u root -e "show databases;" +--------------------+ | Database | +--------------------+ | information_schema | | mydb_test | | mysql | | test | | testdb | +--------------------+