Как проверить, существует ли база данных или нет в рельсах, прежде чем делать рейк 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