我有一个进程,当我的git存储库从我的本地存储库中推送时,它会部署到我的实时应用程序。我这样做是使用更新后的挂钩(见下文)将更改提取到实时应用程序。
echo "Pulling changes into Live..."
cd /var/www/$name || exit
unset GIT_DIR
git pull origin master
exec git-update-server-info
# check if ruby app
if [ -f /var/www/$name/Gemfile ];
then
echo "Ruby app detected..."
bundle install --without development test
bundle exec rake db:migrate # migrate database
# check if database is used. If so, create database, database.yml, postgresql user and run db:setup
# ...
fi
第一次拉动时,如果需要,我想设置数据库。我认为这是Heroku等提供商所做的,或者如果不是,他们必须在首次推送/创建项目时为新应用设置数据库。但我不知道如何从bash脚本中确定应用程序是否使用数据库。我只想通过检测config / database.yml的存在就足够了,但即使这个文件存在,也许这个应用程序不会使用数据库。另外,我在我的提交中不会包含database.yml文件,因此文件不会被拉(甚至从本地推送)。如果我检查/ app / models /中是否存在文件就足够了?或者是否有例如配置文件中的设置,指出应用程序是否使用数据库?我只想在更新后脚本检测到使用数据库时创建数据库。
答案 0 :(得分:1)
查找database.yml或从ActiveRecord :: Base继承的任何模型。
答案 1 :(得分:0)
<强> Buildpacks 强>
我不知道您是否已经这样做了,但您可以从Heroku's buildpacks收集信息
Heroku使用这些来确定您正在使用哪种类型的应用程序,并且是开源的(意味着您可以找到Ruby on Rails buildpack on Github;)
-
<强>移植强>
在发现应用是否使用数据库方面,您最好查看系统的migrations
。这无论如何都不会防弹,但会确保应用程序设置了各种数据库选项以使其正常工作
我现在没有任何代码(如果你愿意,可以找到一些代码,但它将完全未经测试)
-
我提到Heroku,就像我在那里创建一个新项目或我创建时一样 初始推送,也创建了一个数据库
有趣的评论 - Heroku只在其服务器上创建数据库。创建纯数据库实例和填充数据之间存在差异。据我所知,Heroku使用任何数据不填充您的数据库;意思是你的问题实际上是关于尝试设置硬件级别&#34;数据库用于您的应用。
答案 2 :(得分:0)
您可以查看db/migrate
文件夹,看看是否有任何迁移。这通常需要db表。