2015-01-08 5 views
3

Команды, которые работают:Почему я не могу успешно использовать rake db: drop или rake db: purge?

  • грабли БД: мигрировать
  • грабли БД: откатить
  • грабли БД: семена

команды, не:

  • грабли БД : капля
  • rake db: drop: all
  • грабли БД: мигрировать: сброс
  • грабли БД: продувочный

Если я использую БД: отката достаточно времени (или с помощью STEP), мои базы данных падение успешно, но не тогда, когда я использую DB: падение/дб : падение: все. db: migrate: reset и db: очистить все данные нетронутыми. Запуск со следами, просмотр development.log, системные журналы и просмотр запросов БД через монитор БД (для этих команд не запускаются SQL-запросы). Также нет ошибок.

Продолжительность:

  • Rails 4.2
  • Postgres 9.4
  • CentOS 7
+0

Есть ли у вас какие-либо открытые соединения с базой данных, которые вы изменяете? PG не будет удалять базу данных, если есть открытые соединения. –

+0

@PhilipHallstrom Нет, не знаю. Это происходит, даже если я выдаю команды сразу после запуска БД (это также локальная виртуальная машина с одним пользователем, и ничего больше не работает.) –

+0

У меня такая же проблема, когда я меняю database.yml на SQLite, она воссоздает схему базы данных и обновления. гь. Когда я подключаюсь к Postgres, он ничего не делает. Это не проблема с другой сессией, находящейся в базе данных (я ее исследовал), это что-то другое. Как J B, я вообще не вижу выхода. – Giron

ответ

0

У меня была такая же проблема, как и ты, и это answer помогли мне понять это. Вероятно, вы редактировали какую-то миграцию вручную, и это вызвало эту проблему. В конце концов мне пришлось бросить все столы вручную, чтобы это сработало. Но этого может быть достаточно, чтобы просто отказаться от таблицы schema_migrations, где rails хранит уже выполненные миграции. Поэтому попробуйте сбросить все таблицы, если вы можете себе это позволить, или просто отпустите таблицу schema_migrations.

EDIT: К сожалению, он по-прежнему не работает, но вручную удаляется реставрация schema.rb, но db: drop все еще не работает. Таким образом, проблема все еще сохраняется.

1

Вы не можете удалить базу данных PG, если соединение существует.

Если вы не используете эту магию:

# 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 

положить, что в ваших инициализаторах и выполните следующую команду:

rake environment db:drop 

Аргумент среду делает грабли проверить инициализаторы.