最終更新日: 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 | +--------------------+