namespace :db do
desc "Checks to see if the database exists"
task :exists do
begin
Rake::Task['environment'].invoke
ActiveRecord::Base.connection
rescue
exit 1
else
exit 0
end
end
end
...
rails db:exists # Checks to see if the database exists
...
rails db:prepare # Runs setup if database does not exist, or runs migrations if it does
...
rails db:setup # Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)
...
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
我的名字
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
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
if db_version=$(bundle exec rake db:version 2>/dev/null)
then
if [ "$db_version" = "Current version: 0" ]; then
echo "DB is empty"
else
echo "DB exists"
fi
else
echo "DB does not exist"
fi
database_version() {
local DB_VERSION=$(bundle exec rake db:version 2>/dev/null)
if [[ "$DB_VERSION" =~ ^Current\ version\:\ ([[:digit:]]+)$ ]]; then
if [[ "${BASH_REMATCH[1]}" != "" ]]; then
echo $(("${BASH_REMATCH[1]}"))
else
echo -1
fi
return
fi
echo -1
}
if [[ $(($(database_version))) > 0 ]]; then
echo "Database exists"
else
echo "Database does not exist"
fi
9条答案
按热度按时间64jmpszr1#
下面是检查数据库是否已存在的方法:
参考资料
gg58donl2#
我做了一个rake任务,扩展了前面的一些答案。我在Vagrant+Docker设置中经常使用这个任务,所以我可以非常容易地发出一个命令,创建一个新数据库或发出一个迁移到当前数据库的命令。我使用branched database范式进行开发。我经常需要播种一个新数据库或更新现有数据库。
在库/任务/db_exists.rake中:
现在我可以运行一个简单的bash命令:
然后,我将其进一步自动化为Makefile(为简洁起见进行了删减):
转化为:
满足我所有的本地数据库需求。
ttp71kqs3#
如果数据库尚不存在,
rake db:migrate:status
也会返回错误,这一点您也可以放心。我在我的脚本中使用了类似这样的内容:
(灵感来自[penguincoder]
ffx8fchx4#
Rails 6现在有了一个
rails db:prepare
任务。db:prepare
将运行db:migrate
。如果db:migrate
失败,则依次运行db:create
、db:seed
和db:migrate
。使用
rails --tasks
查看所有轨道任务注意:
db:setup
将删除数据库中当前的所有数据。请参阅Joshua Pinters's注解。kiz8lqtg5#
下面是我为此编写的一些bash脚本:
波斯格雷斯
我的名字
这些函数检查
schema_migrations
表是否存在,以确定rake db:setup
以前是否运行过。ffdz8vbo6#
如果DB不存在或者连接不活跃(至少在Rails4+中),这将返回false。
nkhmeac67#
"试试这个"
vmdwslir8#
下面是我用来检查DB状态的代码:
brjng4g39#
我的bash版本: