web-dev-qa-db-ja.com

Rails 5本番用Postgresデータベースをクリアまたは削除する方法

運用データベースを削除して、新たに起動できるようにします。 Rails 5 from Rails 4にアップグレードすると、本番データベースが誤って削除されないように保護されます。_rake db:reset_。

_/app# rake db:reset
  ActiveRecord::SchemaMigration Load (1.8ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (1.6ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", :environment]]
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.3ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", :environment]]
  ActiveRecord::SchemaMigration Load (0.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"
   (0.2ms)  SELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1  [["key", :environment]]
rake aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
/usr/local/bundle/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:51:in `check_protected_environments!'
/usr/local/bundle/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:11:in `block (2 levels) in <top (required)>'
/usr/local/bundle/gems/rake-11.3.0/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)
_

環境変数DISABLE_DATABASE_ENVIRONMENT_CHECK = 1をコマンドに追加すると機能するはずですが、機能しません。実行しても何もしません。

_<606723-x9dh4:/app# DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rake db:reset       
  ActiveRecord::SchemaMigration Load (1.6ms)  SELECT "schema_migrations".* FROM "schema_migrations"
_

誰が私が間違っているのか知っていますか?ヘルプに感謝します!

更新:

サーバーはkubernetesを使用して展開されます。サーバーが実行されているため、データベースをリセットできないと推測しています。

17
Scott B

私のために働いたこれを試してください:

Rails_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

一行で。

29
Prashant

本番データベースをローカルにダンプするときにも発生します。ローカルマシンで削除する場合は、bin/Rails db:environment:set Rails_ENV=developmentを設定し、rake db:dropの後に設定する必要があります

26
yozzz

Rakeコマンドの実行 に関するHerokuのドキュメントから:

Db:resetタスクはサポートされていません。 Herokuアプリには、データベースをドロップおよび作成する権限がありません。代わりにheroku pg:resetコマンドを使用してください。

そのため、Railsまたはrake db:reset、 これを試して:

heroku pg:reset

8
Kostas Rousis

少し遅れる可能性がありますが、standart Rails wayでドロップに失敗した場合、uは常にpsql --u your_userのようなpsqlを使用できます

次に、パスワードタイプ\lを入力して、すべてのデータベースをリストします。私の場合、psqlは単一のテーブルを削除することを拒否し、「testdb」などの追加のdbを作成し、\c testdbと入力して接続を確立し、drop database 'olddb_name';を入力してからcreate database 'olddb_name';とそのできた!

1
Nickolay Efimov

まあ、これは古い投稿ですが、将来の参考のために、あなたはすることができます

    rake db:migrate VERSION=0

その後

    rake db:migrate
1
Marshall

以下のショットをお願いできますか?

Rails_ENV=production rake db:drop
Rails_ENV=production rake db:create

これは古い方法ですが、データベースを初期レベルにリセットするために使用した方法です。

0
marahin