2017-08-14 13:08:09 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-08-06 13:16:09 -04:00
|
|
|
require "abstract_unit"
|
|
|
|
require "minitest/mock"
|
2016-09-18 13:17:12 -04:00
|
|
|
require "rails/command"
|
|
|
|
require "rails/commands/dbconsole/dbconsole_command"
|
2012-04-27 03:28:53 -04:00
|
|
|
|
|
|
|
class Rails::DBConsoleTest < ActiveSupport::TestCase
|
2013-12-15 01:07:34 -05:00
|
|
|
def setup
|
2016-08-06 13:16:09 -04:00
|
|
|
Rails::DBConsole.const_set("APP_PATH", "rails/all")
|
2013-12-15 01:07:34 -05:00
|
|
|
end
|
2012-05-04 10:40:32 -04:00
|
|
|
|
2013-12-15 01:07:34 -05:00
|
|
|
def teardown
|
2016-08-06 13:16:09 -04:00
|
|
|
Rails::DBConsole.send(:remove_const, "APP_PATH")
|
2016-08-16 03:30:11 -04:00
|
|
|
%w[PGUSER PGHOST PGPORT PGPASSWORD DATABASE_URL].each { |key| ENV.delete(key) }
|
2013-12-15 01:07:34 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_config_with_db_config_only
|
|
|
|
config_sample = {
|
2016-10-28 23:05:58 -04:00
|
|
|
"test" => {
|
|
|
|
"adapter" => "sqlite3",
|
|
|
|
"host" => "localhost",
|
|
|
|
"port" => "9000",
|
|
|
|
"database" => "foo_test",
|
|
|
|
"user" => "foo",
|
|
|
|
"password" => "bar",
|
|
|
|
"pool" => "5",
|
|
|
|
"timeout" => "3000"
|
2013-12-15 01:07:34 -05:00
|
|
|
}
|
|
|
|
}
|
2014-07-15 22:36:45 -04:00
|
|
|
app_db_config(config_sample) do
|
2014-08-26 11:53:19 -04:00
|
|
|
assert_equal config_sample["test"], Rails::DBConsole.new.config
|
2014-07-15 22:36:45 -04:00
|
|
|
end
|
2013-12-15 01:07:34 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_config_with_no_db_config
|
2014-07-15 22:36:45 -04:00
|
|
|
app_db_config(nil) do
|
|
|
|
assert_raise(ActiveRecord::AdapterNotSpecified) {
|
|
|
|
Rails::DBConsole.new.config
|
|
|
|
}
|
|
|
|
end
|
2013-12-15 01:07:34 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_config_with_database_url_only
|
2016-08-06 13:16:09 -04:00
|
|
|
ENV["DATABASE_URL"] = "postgresql://foo:bar@localhost:9000/foo_test?pool=5&timeout=3000"
|
2013-12-21 23:09:01 -05:00
|
|
|
expected = {
|
|
|
|
"adapter" => "postgresql",
|
|
|
|
"host" => "localhost",
|
|
|
|
"port" => 9000,
|
|
|
|
"database" => "foo_test",
|
|
|
|
"username" => "foo",
|
|
|
|
"password" => "bar",
|
|
|
|
"pool" => "5",
|
|
|
|
"timeout" => "3000"
|
2013-12-15 01:07:34 -05:00
|
|
|
}.sort
|
2014-07-15 22:36:45 -04:00
|
|
|
|
|
|
|
app_db_config(nil) do
|
|
|
|
assert_equal expected, Rails::DBConsole.new.config.sort
|
|
|
|
end
|
2013-12-15 01:07:34 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_config_choose_database_url_if_exists
|
2013-12-21 23:09:01 -05:00
|
|
|
host = "database-url-host.com"
|
2016-08-06 13:16:09 -04:00
|
|
|
ENV["DATABASE_URL"] = "postgresql://foo:bar@#{host}:9000/foo_test?pool=5&timeout=3000"
|
2013-12-15 01:07:34 -05:00
|
|
|
sample_config = {
|
|
|
|
"test" => {
|
2013-12-21 23:09:01 -05:00
|
|
|
"adapter" => "postgresql",
|
|
|
|
"host" => "not-the-#{host}",
|
|
|
|
"port" => 9000,
|
|
|
|
"database" => "foo_test",
|
|
|
|
"username" => "foo",
|
|
|
|
"password" => "bar",
|
|
|
|
"pool" => "5",
|
|
|
|
"timeout" => "3000"
|
2013-12-15 01:07:34 -05:00
|
|
|
}
|
|
|
|
}
|
2014-07-15 22:36:45 -04:00
|
|
|
app_db_config(sample_config) do
|
|
|
|
assert_equal host, Rails::DBConsole.new.config["host"]
|
|
|
|
end
|
2012-05-04 10:40:32 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_env
|
2014-08-26 11:53:19 -04:00
|
|
|
assert_equal "test", Rails::DBConsole.new.environment
|
2012-05-11 17:19:58 -04:00
|
|
|
|
2016-08-06 13:16:09 -04:00
|
|
|
ENV["RAILS_ENV"] = nil
|
|
|
|
ENV["RACK_ENV"] = nil
|
2012-05-04 10:40:32 -04:00
|
|
|
|
2014-07-15 22:36:45 -04:00
|
|
|
Rails.stub(:respond_to?, false) do
|
2014-08-26 11:53:19 -04:00
|
|
|
assert_equal "development", Rails::DBConsole.new.environment
|
2012-05-04 10:40:32 -04:00
|
|
|
|
2016-08-06 13:16:09 -04:00
|
|
|
ENV["RACK_ENV"] = "rack_env"
|
2015-03-20 11:14:11 -04:00
|
|
|
assert_equal "rack_env", Rails::DBConsole.new.environment
|
|
|
|
|
2016-08-06 13:16:09 -04:00
|
|
|
ENV["RAILS_ENV"] = "rails_env"
|
2014-08-26 11:53:19 -04:00
|
|
|
assert_equal "rails_env", Rails::DBConsole.new.environment
|
2014-07-15 22:36:45 -04:00
|
|
|
end
|
2012-05-07 00:38:34 -04:00
|
|
|
ensure
|
2016-08-06 13:16:09 -04:00
|
|
|
ENV["RAILS_ENV"] = "test"
|
|
|
|
ENV["RACK_ENV"] = nil
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
2012-12-27 10:04:54 -05:00
|
|
|
def test_rails_env_is_development_when_argument_is_dev
|
2017-06-08 18:15:41 -04:00
|
|
|
assert_deprecated do
|
|
|
|
stub_available_environments([ "development", "test" ]) do
|
|
|
|
assert_match("development", parse_arguments([ "dev" ])[:environment])
|
|
|
|
end
|
2014-07-15 22:36:45 -04:00
|
|
|
end
|
2012-12-27 10:04:54 -05:00
|
|
|
end
|
|
|
|
|
2017-07-16 08:54:04 -04:00
|
|
|
def test_rails_env_is_development_when_environment_option_is_dev
|
|
|
|
stub_available_environments([ "development", "test" ]) do
|
|
|
|
assert_match("development", parse_arguments([ "-e", "dev" ])[:environment])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-12-27 10:04:54 -05:00
|
|
|
def test_rails_env_is_dev_when_argument_is_dev_and_dev_env_is_present
|
2017-06-08 18:15:41 -04:00
|
|
|
assert_deprecated do
|
|
|
|
stub_available_environments([ "dev" ]) do
|
|
|
|
assert_match("dev", parse_arguments([ "dev" ])[:environment])
|
|
|
|
end
|
2014-07-15 22:36:45 -04:00
|
|
|
end
|
2012-12-27 10:04:54 -05:00
|
|
|
end
|
|
|
|
|
2012-04-27 03:28:53 -04:00
|
|
|
def test_mysql
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "mysql2", database: "db")
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal [%w[mysql mysql5], "db"], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_mysql_full
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "mysql2", database: "db", host: "locahost", port: 1234, socket: "socket", username: "user", password: "qwerty", encoding: "UTF-8")
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal [%w[mysql mysql5], "--host=locahost", "--port=1234", "--socket=socket", "--user=user", "--default-character-set=UTF-8", "-p", "db"], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_mysql_include_password
|
2016-08-16 03:30:11 -04:00
|
|
|
start({ adapter: "mysql2", database: "db", username: "user", password: "qwerty" }, ["-p"])
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal [%w[mysql mysql5], "--user=user", "--password=qwerty", "db"], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_postgresql
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "postgresql", database: "db")
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["psql", "db"], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_postgresql_full
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "postgresql", database: "db", username: "user", password: "q1w2e3", host: "host", port: 5432)
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["psql", "db"], dbconsole.find_cmd_and_exec_args
|
|
|
|
assert_equal "user", ENV["PGUSER"]
|
|
|
|
assert_equal "host", ENV["PGHOST"]
|
|
|
|
assert_equal "5432", ENV["PGPORT"]
|
|
|
|
assert_not_equal "q1w2e3", ENV["PGPASSWORD"]
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_postgresql_include_password
|
2016-08-16 03:30:11 -04:00
|
|
|
start({ adapter: "postgresql", database: "db", username: "user", password: "q1w2e3" }, ["-p"])
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["psql", "db"], dbconsole.find_cmd_and_exec_args
|
|
|
|
assert_equal "user", ENV["PGUSER"]
|
|
|
|
assert_equal "q1w2e3", ENV["PGPASSWORD"]
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_sqlite3
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "sqlite3", database: "db.sqlite3")
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["sqlite3", Rails.root.join("db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_sqlite3_mode
|
2016-08-16 03:30:11 -04:00
|
|
|
start({ adapter: "sqlite3", database: "db.sqlite3" }, ["--mode", "html"])
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["sqlite3", "-html", Rails.root.join("db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_sqlite3_header
|
2016-08-16 03:30:11 -04:00
|
|
|
start({ adapter: "sqlite3", database: "db.sqlite3" }, ["--header"])
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["sqlite3", "-header", Rails.root.join("db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
|
2012-05-04 04:54:20 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_sqlite3_db_absolute_path
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "sqlite3", database: "/tmp/db.sqlite3")
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["sqlite3", "/tmp/db.sqlite3"], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
Fix rails db command with sqlite3 database
When using sqlite3 it was attempting to find the database file based on
Rails.root, the problem is that Rails.root is not always present because
we try to first manually load "config/database.yml" instead of loading
the entire app, to make "rails db" faster.
This means that when we're in the root path of the app, calling "rails db"
won't allow us to use Rails.root, making the command fail for sqlite3
with the error:
./rails/commands/dbconsole.rb:62:in `start':
undefined method `root' for Rails:Module (NoMethodError)
The fix is to simply not pass any dir string to File.expand_path, which
will make it use the current directory of the process as base, or the
root path of the app, which is what we want.
When we are in any other subdirectory, calling "rails db" should work
just fine, because "config/database.yml" won't be found, thus "rails db"
will fallback to loading the app, making Rails.root available.
Closes #8257.
2012-11-18 20:46:33 -05:00
|
|
|
def test_sqlite3_db_without_defined_rails_root
|
2014-07-15 22:36:45 -04:00
|
|
|
Rails.stub(:respond_to?, false) do
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "sqlite3", database: "config/db.sqlite3")
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["sqlite3", Rails.root.join("../config/db.sqlite3").to_s], dbconsole.find_cmd_and_exec_args
|
2014-07-15 22:36:45 -04:00
|
|
|
end
|
Fix rails db command with sqlite3 database
When using sqlite3 it was attempting to find the database file based on
Rails.root, the problem is that Rails.root is not always present because
we try to first manually load "config/database.yml" instead of loading
the entire app, to make "rails db" faster.
This means that when we're in the root path of the app, calling "rails db"
won't allow us to use Rails.root, making the command fail for sqlite3
with the error:
./rails/commands/dbconsole.rb:62:in `start':
undefined method `root' for Rails:Module (NoMethodError)
The fix is to simply not pass any dir string to File.expand_path, which
will make it use the current directory of the process as base, or the
root path of the app, which is what we want.
When we are in any other subdirectory, calling "rails db" should work
just fine, because "config/database.yml" won't be found, thus "rails db"
will fallback to loading the app, making Rails.root available.
Closes #8257.
2012-11-18 20:46:33 -05:00
|
|
|
end
|
|
|
|
|
2012-04-27 03:28:53 -04:00
|
|
|
def test_oracle
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "oracle", database: "db", username: "user", password: "secret")
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["sqlplus", "user@db"], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_oracle_include_password
|
2016-08-16 03:30:11 -04:00
|
|
|
start({ adapter: "oracle", database: "db", username: "user", password: "secret" }, ["-p"])
|
2018-04-17 18:21:34 -04:00
|
|
|
assert_not aborted
|
2016-08-06 13:16:09 -04:00
|
|
|
assert_equal ["sqlplus", "user/secret@db"], dbconsole.find_cmd_and_exec_args
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
2017-08-29 03:48:33 -04:00
|
|
|
def test_sqlserver
|
|
|
|
start(adapter: "sqlserver", database: "db", username: "user", password: "secret", host: "localhost", port: 1433)
|
|
|
|
assert_not aborted
|
|
|
|
assert_equal ["sqsh", "-D", "db", "-U", "user", "-P", "secret", "-S", "localhost:1433"], dbconsole.find_cmd_and_exec_args
|
|
|
|
end
|
|
|
|
|
2012-04-27 03:28:53 -04:00
|
|
|
def test_unknown_command_line_client
|
2016-08-06 13:16:09 -04:00
|
|
|
start(adapter: "unknown", database: "db")
|
2012-04-27 03:28:53 -04:00
|
|
|
assert aborted
|
2012-05-30 05:08:56 -04:00
|
|
|
assert_match(/Unknown command-line client for db/, output)
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
|
2017-06-05 17:19:00 -04:00
|
|
|
def test_primary_is_automatically_picked_with_3_level_configuration
|
|
|
|
sample_config = {
|
|
|
|
"test" => {
|
|
|
|
"primary" => {
|
|
|
|
"adapter" => "postgresql"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
app_db_config(sample_config) do
|
|
|
|
assert_equal "postgresql", Rails::DBConsole.new.config["adapter"]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_specifying_a_custom_connection_and_environment
|
|
|
|
stub_available_environments(["development"]) do
|
|
|
|
dbconsole = parse_arguments(["-c", "custom", "-e", "development"])
|
|
|
|
|
|
|
|
assert_equal "development", dbconsole[:environment]
|
|
|
|
assert_equal "custom", dbconsole.connection
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_specifying_a_missing_connection
|
|
|
|
app_db_config({}) do
|
|
|
|
e = assert_raises(ActiveRecord::AdapterNotSpecified) do
|
|
|
|
Rails::Command.invoke(:dbconsole, ["-c", "i_do_not_exist"])
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_includes e.message, "'i_do_not_exist' connection is not configured."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_specifying_a_missing_environment
|
|
|
|
app_db_config({}) do
|
|
|
|
e = assert_raises(ActiveRecord::AdapterNotSpecified) do
|
|
|
|
Rails::Command.invoke(:dbconsole)
|
|
|
|
end
|
|
|
|
|
|
|
|
assert_includes e.message, "'test' database is not configured."
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-05-04 14:04:53 -04:00
|
|
|
def test_print_help_short
|
|
|
|
stdout = capture(:stdout) do
|
2016-09-18 13:17:12 -04:00
|
|
|
Rails::Command.invoke(:dbconsole, ["-h"])
|
2012-05-04 14:04:53 -04:00
|
|
|
end
|
2018-06-29 11:51:57 -04:00
|
|
|
assert_match(/rails dbconsole \[environment\]/, stdout)
|
2012-05-04 14:04:53 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_print_help_long
|
|
|
|
stdout = capture(:stdout) do
|
2016-09-18 13:17:12 -04:00
|
|
|
Rails::Command.invoke(:dbconsole, ["--help"])
|
2012-05-04 14:04:53 -04:00
|
|
|
end
|
2018-06-29 11:51:57 -04:00
|
|
|
assert_match(/rails dbconsole \[environment\]/, stdout)
|
2012-05-04 14:04:53 -04:00
|
|
|
end
|
|
|
|
|
2012-04-27 03:28:53 -04:00
|
|
|
attr_reader :aborted, :output
|
2013-04-04 13:53:46 -04:00
|
|
|
private :aborted, :output
|
|
|
|
|
|
|
|
private
|
2012-04-27 03:28:53 -04:00
|
|
|
|
2016-08-06 13:55:02 -04:00
|
|
|
def app_db_config(results)
|
|
|
|
Rails.application.config.stub(:database_configuration, results || {}) do
|
|
|
|
yield
|
|
|
|
end
|
2014-07-15 22:36:45 -04:00
|
|
|
end
|
2013-12-15 01:07:34 -05:00
|
|
|
|
2016-09-18 13:17:12 -04:00
|
|
|
def make_dbconsole
|
|
|
|
Class.new(Rails::DBConsole) do
|
2016-08-06 13:55:02 -04:00
|
|
|
attr_reader :find_cmd_and_exec_args
|
2014-07-15 22:36:45 -04:00
|
|
|
|
2016-08-06 13:55:02 -04:00
|
|
|
def find_cmd_and_exec(*args)
|
|
|
|
@find_cmd_and_exec_args = args
|
|
|
|
end
|
2016-09-18 13:17:12 -04:00
|
|
|
end
|
2016-08-06 13:55:02 -04:00
|
|
|
end
|
2012-04-27 03:28:53 -04:00
|
|
|
|
2016-09-18 13:17:12 -04:00
|
|
|
attr_reader :dbconsole
|
|
|
|
|
2016-08-06 13:55:02 -04:00
|
|
|
def start(config = {}, argv = [])
|
2016-09-18 13:17:12 -04:00
|
|
|
@dbconsole = make_dbconsole.new(parse_arguments(argv))
|
|
|
|
@dbconsole.stub(:config, config.stringify_keys) do
|
|
|
|
capture_abort { @dbconsole.start }
|
2014-07-15 22:36:45 -04:00
|
|
|
end
|
|
|
|
end
|
2012-04-27 03:28:53 -04:00
|
|
|
|
2016-08-06 13:55:02 -04:00
|
|
|
def capture_abort
|
|
|
|
@aborted = false
|
|
|
|
@output = capture(:stderr) do
|
|
|
|
begin
|
|
|
|
yield
|
|
|
|
rescue SystemExit
|
|
|
|
@aborted = true
|
|
|
|
end
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|
|
|
|
end
|
2016-09-18 13:17:12 -04:00
|
|
|
|
|
|
|
def stub_available_environments(environments)
|
|
|
|
Rails::Command::DbconsoleCommand.class_eval do
|
|
|
|
alias_method :old_environments, :available_environments
|
|
|
|
|
|
|
|
define_method :available_environments do
|
|
|
|
environments
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
Rails::Command::DbconsoleCommand.class_eval do
|
|
|
|
undef_method :available_environments
|
|
|
|
alias_method :available_environments, :old_environments
|
|
|
|
undef_method :old_environments
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def parse_arguments(args)
|
|
|
|
Rails::Command::DbconsoleCommand.class_eval do
|
|
|
|
alias_method :old_perform, :perform
|
|
|
|
define_method(:perform) do
|
|
|
|
extract_environment_option_from_argument
|
|
|
|
|
|
|
|
options
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Rails::Command.invoke(:dbconsole, args)
|
|
|
|
ensure
|
|
|
|
Rails::Command::DbconsoleCommand.class_eval do
|
|
|
|
undef_method :perform
|
|
|
|
alias_method :perform, :old_perform
|
|
|
|
undef_method :old_perform
|
|
|
|
end
|
|
|
|
end
|
2012-04-27 03:28:53 -04:00
|
|
|
end
|