Как проверить, существует ли база данных или нет в рельсах, прежде чем делать rake db: setup

Как проверить, существует ли база данных или нет в рельсах, прежде чем делать рейк db: setup?

Я хотел бы проверить, существует ли база данных до создания db: create. Я пока не видел конкретного пути в рельсах, но я знаю, что это можно сделать с помощью сценариев mysql

Ответ 1

Вот метод, который проверяет, существует ли база данных:

def database_exists?
  ActiveRecord::Base.connection
rescue ActiveRecord::NoDatabaseError
  false
else
  true
end

Ссылки

Ответ 2

Я сделал рейк-задачу, которая расширяет некоторые из предыдущих ответов. Я использую это много в настройке Vagrant + Docker, поэтому я могу очень легко выпустить одну команду и либо создать новую базу данных, либо выполнить миграцию в текущую базу данных. Я использую парадигму

Итак, теперь я могу запустить простую команду bash:

rake db:exists && rake db:migrate || rake db:setup

Что я потом автоматизировал в Makefile (сокращенно для краткости):

.PHONY database
database:
        rake db:exists && rake db:migrate || rake db:setup

Переведено на:

make database

Для всех моих потребностей в локальной базе данных.

Ответ 3

Вот несколько сценариев bash, которые я сделал для этой цели:

Postgres

if echo "\c $PGDATABASE; \dt" | psql | grep schema_migrations 2>&1 >/dev/null
then
   bundle exec rake db:migrate
else
   bundle exec rake db:setup
fi

Mysql

 if echo "use $MYSQLDATABASE; show tables" | mysql | grep schema_migrations 2>&1 > /dev/null
 then
     bundle exec rake db:migrate
 else
     bundle exec rake db:setup
 fi

Они проверяют наличие таблицы schema_migrations, чтобы определить, был ли ранее запущен rake db:setup.

Ответ 4

Вы также можете рассчитывать на то, что rake db:migrate возвращает ошибку, если база данных еще не существует.

Я использовал что-то вроде этого в своих скриптах:

rake db:migrate 2>/dev/null || rake db:setup

(Вдохновленный penguincoder)

Ответ 5

ПОПРОБУЙ ЭТО

 IF EXISTS 
       (
         SELECT name FROM master.dbo.sysdatabases 
        WHERE name = N'New_Database'
        )
    BEGIN
        SELECT 'Database Name already Exist' AS Message
    END
    ELSE
    BEGIN
        CREATE DATABASE [New_Database]
        SELECT 'New Database is Created'
    END

Ответ 6

Это вернет false, если БД не существует или соединение неактивно (по крайней мере, в Rails 4+).

::ActiveRecord::Base.connection_pool.with_connection(&:active?) rescue false