diff options
author | Steve Purcell <steve@sanityinc.com> | 2008-05-04 12:53:50 +0200 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-05-07 13:52:00 -0700 |
commit | 4a07103687084496b773e18a03b1f2f5e686f7ad (patch) | |
tree | 98b50b9347310a9fa9d9e561d0b2d5d245addc72 | |
parent | 0a21193dc660396fb993b06d1d3c168a9cd900a5 (diff) | |
download | rails-4a07103687084496b773e18a03b1f2f5e686f7ad.tar.gz rails-4a07103687084496b773e18a03b1f2f5e686f7ad.tar.bz2 rails-4a07103687084496b773e18a03b1f2f5e686f7ad.zip |
Add 'script/dbconsole' -- the database analog of 'script/console'
-rwxr-xr-x | railties/bin/dbconsole | 3 | ||||
-rw-r--r-- | railties/lib/commands/dbconsole.rb | 49 |
2 files changed, 52 insertions, 0 deletions
diff --git a/railties/bin/dbconsole b/railties/bin/dbconsole new file mode 100755 index 0000000000..caa60ce829 --- /dev/null +++ b/railties/bin/dbconsole @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/boot' +require 'commands/dbconsole' diff --git a/railties/lib/commands/dbconsole.rb b/railties/lib/commands/dbconsole.rb new file mode 100644 index 0000000000..03477f9b69 --- /dev/null +++ b/railties/lib/commands/dbconsole.rb @@ -0,0 +1,49 @@ +require 'optparse' +OptionParser.new do |opt| + opt.banner = "Usage: dbconsole [environment]" + opt.parse!(ARGV) + abort opt.to_s unless (0..1).include?(ARGV.size) +end + +env = ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'development' + +def find_cmd(*commands) + dirs_on_path = ENV['PATH'].split(File::PATH_SEPARATOR) + commands += commands.map{|cmd| "#{cmd}.exe"} if RUBY_PLATFORM =~ /win32/ + commands.detect do |cmd| + dirs_on_path.detect do |path| + File.executable? File.join(path, cmd) + end + end || abort("couldn't find matching executable: #{commands.join(', ')}") +end + + +require 'yaml' +config = YAML::load(File.read(RAILS_ROOT + "/config/database.yml"))[env] + +unless config + abort "No database is configured for the environment '#{env}'" +end + +case config["adapter"] +when "mysql" + exec(find_cmd(*%w(mysql5 mysql)), + *({ 'host' => '--host', + 'port' => '--port', + 'socket' => '--socket', + 'username' => '--user', + 'password' => '--password', + 'encoding' => '--default-character-set' + }.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact + + [config['database']])) +when "postgresql" + ENV['PGHOST'] = config["host"] if config["host"] + ENV['PGPORT'] = config["port"].to_s if config["port"] + ENV['PGPASSWORD'] = config["password"].to_s if config["password"] + exec(find_cmd('psql'), '-U', config["username"], config["database"]) +when "sqlite" + exec(find_cmd('sqlite'), config["database"]) +when "sqlite3" + exec(find_cmd('sqlite3'), config["database"]) +else abort "not supported for this database type" +end |