MySQL用のRakefileのサンプル

最終更新日: 2011年5月15日

HomeBack

  1. サンプル
  2. クエリーの実行

[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             |
+--------------------+
			


HomeBack