2016-11-23 40 views
10

我想删除一个生产数据库,所以我可以开始新鲜。当我从rails 4升级到rails 5时,它现在可以保护生产数据库免遭意外删除。当我运行rake db:reset时,它显示以下错误消息。Rails 5如何清除或删除生产postgres数据库

/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" 

任何人都知道我在做什么错了?感谢帮助!

UPDATE:

我的服务器使用kubernetes部署。我猜测我无法重置数据库,因为服务器正在运行。

+0

后,你可以尝试使用,而不是像耙'RAILS_ENV =生产DISABLE_DATABASE_ENVIRONMENT_CHECK = 1箱/轨道DB导轨:reset' – neydroid

+0

没有吕克k,只是做同样的事情。 –

回答

0

你可以在下面拍一下吗?

RAILS_ENV=production rake db:drop 
RAILS_ENV=production rake db:create 

这是一个古老的方法,但这就是我用来重置数据库到原始级别。

10

试试这个,它的工作对我来说:

RAILS_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

在一行。

0

它不工作,但你应该这样

bundle exec rake RAILS_ENV=production db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 

运行的命令,当你删除表,你必须创建它back.So如果你没有权利CREATEDB你会得到错误。 Here you as-wer Postgres permission denied to create database on rake db:create:all

当您键入psql时,您可以通过键入\q从那里退出。

就像我说的这不是答案,但我希望这会节省您的时间,而你正在寻找。因为我现在就在那里。 GL & HF

0

好,尽管这是一个老帖子,但将来参考,也许你可以在Running Rake commands

rake db:migrate VERSION=0 

然后

rake db:migrate 
2

从Heroku的文档:

db:reset任务不受支持。 Heroku应用程序无权删除和创建数据库。改用heroku pg:reset命令。

因此,而不是试图让railsrake db:reset,试试这个:

heroku pg:reset

6

对于那些谁了复制生产数据库到本地,并要砸本地机器上,你需要设置bin/rails db:environment:set RAILS_ENV=developmentrake db:drop