diff options
author | schneems <richard.schneeman@gmail.com> | 2015-08-14 11:31:33 -0500 |
---|---|---|
committer | schneems <richard.schneeman@gmail.com> | 2016-01-07 18:01:05 -0600 |
commit | 900bfd94a9c3c45484d88aa69071b7a52c5b04b4 (patch) | |
tree | 9f28b1f0acf2f74143ec7806bd89081430f6f306 /railties/test/application/rake | |
parent | 89f776402dbaca581ef4bb342bb89db922124c7a (diff) | |
download | rails-900bfd94a9c3c45484d88aa69071b7a52c5b04b4.tar.gz rails-900bfd94a9c3c45484d88aa69071b7a52c5b04b4.tar.bz2 rails-900bfd94a9c3c45484d88aa69071b7a52c5b04b4.zip |
Prevent destructive action on production database
This PR introduces a key/value type store to Active Record that can be used for storing internal values. It is an alternative implementation to #21237 cc @sgrif @matthewd.
It is possible to run your tests against your production database by accident right now. While infrequently, but as an anecdotal data point, Heroku receives a non-trivial number of requests for a database restore due to this happening. In these cases the loss can be large.
To prevent against running tests against production we can store the "environment" version that was used when migrating the database in a new internal table. Before executing tests we can see if the database is a listed in `protected_environments` and abort. There is a manual escape valve to force this check from happening with environment variable `DISABLE_DATABASE_ENVIRONMENT_CHECK=1`.
Diffstat (limited to 'railties/test/application/rake')
-rw-r--r-- | railties/test/application/rake/dbs_test.rb | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/railties/test/application/rake/dbs_test.rb b/railties/test/application/rake/dbs_test.rb index 0b0fb50fe1..47ab65e57b 100644 --- a/railties/test/application/rake/dbs_test.rb +++ b/railties/test/application/rake/dbs_test.rb @@ -85,7 +85,7 @@ module ApplicationTests test 'db:drop failure because database does not exist' do Dir.chdir(app_path) do - output = `bin/rake db:drop 2>&1` + output = `bin/rake db:drop:_unsafe --trace 2>&1` assert_match(/does not exist/, output) assert_equal 0, $?.exitstatus end @@ -222,14 +222,14 @@ module ApplicationTests assert_equal '["posts"]', list_tables[] `bin/rake db:schema:load` - assert_equal '["posts", "comments", "schema_migrations"]', list_tables[] + assert_equal '["posts", "comments", "schema_migrations", "internal_metadatas"]', list_tables[] app_file 'db/structure.sql', <<-SQL CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255)); SQL `bin/rake db:structure:load` - assert_equal '["posts", "comments", "schema_migrations", "users"]', list_tables[] + assert_equal '["posts", "comments", "schema_migrations", "internal_metadatas", "users"]', list_tables[] end end |