From 2561732a08ae97fa44706a8eca4db147c4a7c286 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Wed, 7 May 2008 13:50:46 -0700 Subject: Some dbconsole tweaks. [#102 state:resolved] --- railties/lib/commands/dbconsole.rb | 46 +++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/railties/lib/commands/dbconsole.rb b/railties/lib/commands/dbconsole.rb index 03477f9b69..28c3a3e41f 100644 --- a/railties/lib/commands/dbconsole.rb +++ b/railties/lib/commands/dbconsole.rb @@ -1,49 +1,55 @@ +require 'yaml' 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' +env = ARGV.first || ENV['RAILS_ENV'] || 'development' +unless config = YAML.load_file(RAILS_ROOT + "/config/database.yml")[env] + abort "No database is configured for the environment '#{env}'" +end + def find_cmd(*commands) - dirs_on_path = ENV['PATH'].split(File::PATH_SEPARATOR) + dirs_on_path = ENV['PATH'].to_s.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 || abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.") end +case config["adapter"] +when "mysql" + args = { + 'host' => '--host', + 'port' => '--port', + 'socket' => '--socket', + 'username' => '--user', + 'password' => '--password', + 'encoding' => '--default-character-set' + }.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact -require 'yaml' -config = YAML::load(File.read(RAILS_ROOT + "/config/database.yml"))[env] + args << config['database'] -unless config - abort "No database is configured for the environment '#{env}'" -end + exec(find_cmd('mysql5', 'mysql'), *args) -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" + +else + abort "Unknown command-line client for #{config['database']}. Submit a Rails patch to add support!" end -- cgit v1.2.3