mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix can't modify frozen String
error in DatabaseTasks
Without this, `db:structure:dump` task raises an error as follwing: ``` can't modify frozen String activerecord/lib/active_record/tasks/sqlite_database_tasks.rb:77:in `run_cmd_error' activerecord/lib/active_record/tasks/sqlite_database_tasks.rb:72:in `run_cmd' activerecord/lib/active_record/tasks/sqlite_database_tasks.rb:52:in `structure_dump' activerecord/lib/active_record/tasks/database_tasks.rb:219:in `structure_dump' activerecord/lib/active_record/railties/databases.rake:279:in `block (3 levels) in <main>' railties/lib/rails/commands/rake/rake_command.rb:23:in `block in perform' railties/lib/rails/commands/rake/rake_command.rb:20:in `perform' railties/lib/rails/command.rb:48:in `invoke' railties/lib/rails/commands.rb:18:in `<main>' ```
This commit is contained in:
parent
5c2c8d8cfd
commit
c9a084a530
4 changed files with 37 additions and 2 deletions
|
@ -117,7 +117,7 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_cmd_error(cmd, args, action)
|
def run_cmd_error(cmd, args, action)
|
||||||
msg = "failed to execute:\n"
|
msg = "failed to execute:\n".dup
|
||||||
msg << "#{cmd} #{args.join(' ')}\n\n"
|
msg << "#{cmd} #{args.join(' ')}\n\n"
|
||||||
msg << "Please check the output above for any errors and make sure that `#{cmd}` is installed in your PATH and has proper permissions.\n\n"
|
msg << "Please check the output above for any errors and make sure that `#{cmd}` is installed in your PATH and has proper permissions.\n\n"
|
||||||
msg
|
msg
|
||||||
|
|
|
@ -73,7 +73,7 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_cmd_error(cmd, args)
|
def run_cmd_error(cmd, args)
|
||||||
msg = "failed to execute:\n"
|
msg = "failed to execute:\n".dup
|
||||||
msg << "#{cmd} #{args.join(' ')}\n\n"
|
msg << "#{cmd} #{args.join(' ')}\n\n"
|
||||||
msg << "Please check the output above for any errors and make sure that `#{cmd}` is installed in your PATH and has proper permissions.\n\n"
|
msg << "Please check the output above for any errors and make sure that `#{cmd}` is installed in your PATH and has proper permissions.\n\n"
|
||||||
msg
|
msg
|
||||||
|
|
|
@ -295,6 +295,16 @@ if current_adapter?(:PostgreSQLAdapter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_structure_dump_execution_fails
|
||||||
|
filename = "awesome-file.sql"
|
||||||
|
Kernel.expects(:system).with("pg_dump", "-s", "-x", "-O", "-f", filename, "my-app-db").returns(nil)
|
||||||
|
|
||||||
|
e = assert_raise(RuntimeError) do
|
||||||
|
ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, filename)
|
||||||
|
end
|
||||||
|
assert_match("failed to execute:", e.message)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def with_dump_schemas(value, &block)
|
def with_dump_schemas(value, &block)
|
||||||
old_dump_schemas = ActiveRecord::Base.dump_schemas
|
old_dump_schemas = ActiveRecord::Base.dump_schemas
|
||||||
|
|
|
@ -215,6 +215,31 @@ if current_adapter?(:SQLite3Adapter)
|
||||||
FileUtils.rm_f(filename)
|
FileUtils.rm_f(filename)
|
||||||
FileUtils.rm_f(dbfile)
|
FileUtils.rm_f(dbfile)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_structure_dump_execution_fails
|
||||||
|
dbfile = @database
|
||||||
|
filename = "awesome-file.sql"
|
||||||
|
Kernel.expects(:system).with("sqlite3", "--noop", "db_create.sqlite3", ".schema", out: "awesome-file.sql").returns(nil)
|
||||||
|
|
||||||
|
e = assert_raise(RuntimeError) do
|
||||||
|
with_structure_dump_flags(["--noop"]) do
|
||||||
|
quietly { ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, filename, "/rails/root") }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_match("failed to execute:", e.message)
|
||||||
|
ensure
|
||||||
|
FileUtils.rm_f(filename)
|
||||||
|
FileUtils.rm_f(dbfile)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def with_structure_dump_flags(flags)
|
||||||
|
old = ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags
|
||||||
|
ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags = flags
|
||||||
|
yield
|
||||||
|
ensure
|
||||||
|
ActiveRecord::Tasks::DatabaseTasks.structure_dump_flags = old
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class SqliteStructureLoadTest < ActiveRecord::TestCase
|
class SqliteStructureLoadTest < ActiveRecord::TestCase
|
||||||
|
|
Loading…
Reference in a new issue