Methods

Class Public methods

new(options = {})

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 13
    def initialize(options = {})
      @options = options
    end
🔎 See on GitHub

start(*args)

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 9
    def self.start(*args)
      new(*args).start
    end
🔎 See on GitHub

Instance Public methods

config()

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 93
    def config
      db_config.configuration_hash
    end
🔎 See on GitHub

database()

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 122
    def database
      @options[:database]
    end
🔎 See on GitHub

db_config()

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 98
    def db_config
      return @db_config if defined?(@db_config)

      # If the user provided a database, use that. Otherwise find
      # the first config in the database.yml
      if database
        @db_config = configurations.configs_for(env_name: environment, name: database, include_replicas: true)
      else
        @db_config = configurations.find_db_config(environment)
      end

      unless @db_config
        missing_db = database ? "'#{database}' database is not" : "No databases are"
        raise ActiveRecord::AdapterNotSpecified,
          "#{missing_db} configured for '#{environment}'. Available configuration: #{configurations.inspect}"
      end

      @db_config
    end
🔎 See on GitHub

environment()

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 118
    def environment
      Rails.respond_to?(:env) ? Rails.env : Rails::Command.environment
    end
🔎 See on GitHub

start()

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 17
    def start
      ENV["RAILS_ENV"] ||= @options[:environment] || environment
      config = db_config.configuration_hash

      case db_config.adapter
      when /^(jdbc)?mysql/
        args = {
          host: "--host",
          port: "--port",
          socket: "--socket",
          username: "--user",
          encoding: "--default-character-set",
          sslca: "--ssl-ca",
          sslcert: "--ssl-cert",
          sslcapath: "--ssl-capath",
          sslcipher: "--ssl-cipher",
          sslkey: "--ssl-key"
        }.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact

        if config[:password] && @options[:include_password]
          args << "--password=#{config[:password]}"
        elsif config[:password] && !config[:password].to_s.empty?
          args << "-p"
        end

        args << db_config.database

        find_cmd_and_exec(["mysql", "mysql5"], *args)

      when /^postgres|^postgis/
        ENV["PGUSER"]     = config[:username] if config[:username]
        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] && @options[:include_password]
        find_cmd_and_exec("psql", db_config.database)

      when "sqlite3"
        args = []

        args << "-#{@options[:mode]}" if @options[:mode]
        args << "-header" if @options[:header]
        args << File.expand_path(db_config.database, Rails.respond_to?(:root) ? Rails.root : nil)

        find_cmd_and_exec("sqlite3", *args)

      when "oracle", "oracle_enhanced"
        logon = ""

        if config[:username]
          logon = config[:username].dup
          logon << "/#{config[:password]}" if config[:password] && @options[:include_password]
          logon << "@#{db_config.database}" if db_config.database
        end

        find_cmd_and_exec("sqlplus", logon)

      when "sqlserver"
        args = []

        args += ["-d", "#{db_config.database}"] if db_config.database
        args += ["-U", "#{config[:username]}"] if config[:username]
        args += ["-P", "#{config[:password]}"] if config[:password]

        if config[:host]
          host_arg = +"tcp:#{config[:host]}"
          host_arg << ",#{config[:port]}" if config[:port]
          args += ["-S", host_arg]
        end

        find_cmd_and_exec("sqlcmd", *args)

      else
        abort "Unknown command-line client for #{db_config.database}."
      end
    end
🔎 See on GitHub

Instance Private methods

configurations()

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 127
      def configurations # :doc:
        require APP_PATH
        ActiveRecord::Base.configurations = Rails.application.config.database_configuration
        ActiveRecord::Base.configurations
      end
🔎 See on GitHub

find_cmd_and_exec(commands, *args)

📝 Source code
# File railties/lib/rails/commands/dbconsole/dbconsole_command.rb, line 133
      def find_cmd_and_exec(commands, *args) # :doc:
        commands = Array(commands)

        dirs_on_path = ENV["PATH"].to_s.split(File::PATH_SEPARATOR)
        unless (ext = RbConfig::CONFIG["EXEEXT"]).empty?
          commands = commands.map { |cmd| "#{cmd}#{ext}" }
        end

        full_path_command = nil
        found = commands.detect do |cmd|
          dirs_on_path.detect do |path|
            full_path_command = File.join(path, cmd)
            begin
              stat = File.stat(full_path_command)
            rescue SystemCallError
            else
              stat.file? && stat.executable?
            end
          end
        end

        if found
          exec full_path_command, *args
        else
          abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
        end
      end
🔎 See on GitHub