我需要从ruby脚本(在Rails应用程序之外)运行'rake db:drop'控制台命令。通常看起来很简单:
system("cd /my/path && rake db:drop")
但问题是我在rvm地狱,当我正在做cd /my/path
它没有加载正确的宝石集和环境,这就是为什么我的结果
Could not find activesupport-3.1.12 in any of the sources
Run `bundle install` to install missing gems
此外,由于Rails应用程序正在运行,我遇到了打开连接问题。
怎么做? (我的全局任务是关闭与数据库的现有连接(我们可能有一些,因为我需要删除运行的rails app数据库),删除它,然后再次重新创建)
谢谢!
答案 0 :(得分:1)
要杀死活动连接,我在rake任务中使用它。这应该解决一个问题。
task :kill_postgres_connections => :environment do
db_name = "#{File.basename(Rails.root)}_#{Rails.env}"
sh = <<EOF
ps xa \
| grep postgres: \
| grep #{db_name} \
| grep -v grep \
| awk '{print $1}' \
| xargs kill
EOF
puts `#{sh}`
end
task "db:drop" => :kill_postgres_connections
答案 1 :(得分:1)
要在Rails 4中删除PostgreSQL数据库,您还可以修补ActiveRecord drop方法。基于https://www.krautcomputing.com/blog/2014/01/10/how-to-drop-your-postgres-database-with-rails-4/
# config/initializers/postgresql_database_tasks.rb
module ActiveRecord
module Tasks
class PostgreSQLDatabaseTasks
def drop
establish_master_connection
connection.select_all "select pg_terminate_backend(pg_stat_activity.pid) from pg_stat_activity where datname='#{configuration['database']}' AND state='idle';"
connection.drop_database configuration['database']
end
end
end
end