检测openshift部署钩子中的初始部署

时间:2014-04-09 02:56:11

标签: ruby-on-rails openshift

我在openshift上有一个rails应用程序。我想在openshift的deploy钩子中运行rake db:migrate,除非在第一次部署时,我想运行rake db:setup

这不一定是特定于openshift的,因为部署挂钩只是在部署应用程序时运行的bash脚本。

有没有办法知道之前是否部署了应用程序,或者是否已从部署钩子创建了数据库?

2 个答案:

答案 0 :(得分:1)

我认为你不得不做出这种区分。即使数据库已存在,也可以调用rake db_setup。另请参阅 - How to check if the database exists or not in rails before doing a rake db:setup

或者,您可以创建自定义rails任务。例如,此任务可以尝试访问数据库以检查它是否存在。如果没有,你可以调用db:setup。要了解有关自定义rake任务的更多信息,请查看此精彩视频 - http://railscasts.com/episodes/66-custom-rake-tasks。使用rake的好处是您的解决方案独立于OpenShift,使用Rake可以访问Rails环境。

答案 1 :(得分:0)

我在openshift docs找到了一个解决方案,实际上甚至没有效果。这是我的版本。

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

如果你使用的是postgres,这里有一个类似的命令

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

我确信mysql有一个与$PGDATABASE类似的环境变量,您可以使用而不是$OPENSHIFT_APP_NAME。您可以通过运行rhc ssh -a app-name,然后运行env来获取环境变量列表来找到它。