Max*_*ams 61 git ruby-on-rails heroku
我对我的heroku推送/部署过程略有不满,否则发现和使用会很愉快.
如果我添加一个新的迁移到我的应用程序,我可以将它上传到heroku服务器的唯一方法是推送到heroku远程.这会上传并重新启动应用.不过,这并不运行迁移,所以我必须做的heroku rake db:migrate --app myapp,然后heroku restart --app myapp.与此同时,应用程序被破坏,因为它没有运行迁移,代码在迁移中引用了字段/表等.
必须有一种方法可以更改部署过程,以便在部署过程中rake db:migrate自动运行,但我无法解决问题.
这是我在heroku cpanel中设置的内容吗?它是从命令行传递给heroku的选项吗?它是一个git钩子吗?谁能让我直截了当?谢谢,最大
Max*_*olf 37
Heroku现在有能力将其作为"发布阶段"功能的一部分来处理.
您可以添加一个名为release您的进程,该进程Procfile将在每次部署期间运行.
Rails> = 5示例
release: bundle exec rails db:migrate
Rails <5示例
release: bundle exec rake db:migrate
Cri*_*ian 32
这个简单的命令链解决方案怎么样:
git push heroku master && heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)
一旦第一个成功完成,它将自动运行迁移.它的延迟是1-2秒或更短.
Pau*_*rth 29
这是一个rake任务,将所有内容包装成一个单行(并且还支持回滚):
https://gist.github.com/362873
您可能仍然风在你的老板的演示的顶部部署,但至少你不浪费之间的时间打字git push和rake db:migrate.
Dan*_*Tao 14
我创建了一个自定义buildpack,让Heroku rake db:migrate在部署时自动运行.它只是Heroku默认的Ruby buildpack的一个分支,但是rake db:migrate添加了任务.
要在您的应用中使用它,您可以这样做:
heroku config:set BUILDPACK_URL=https://github.com/dtao/rake-db-migrate-buildpack
Run Code Online (Sandbox Code Playgroud)
另请注意,要使其工作,您需要启用user-env-compile Heroku Labs功能.这是你如何做到这一点:
heroku labs:enable user-env-compile
Run Code Online (Sandbox Code Playgroud)
这是我的证据,这是有效的:

也许您可以尝试从代码提交(模型,验证等)中分离您的架构提交(迁移等)提交.
(请注意,以下假设您的迁移更改不具有破坏性,因为您已指出涵盖了大多数用例.)
您的部署过程可能是:
这当然远非最佳,但是在您描述的情况下避免停机的有效方法是:当应用程序收到动态字段的代码时,数据库已经已经迁移.
(当然,最简单的解决方案就是在老板出去吃饭时简单地推送和迁移;-D)
否则,即使自动执行架构修改,您仍然会在迁移运行之前冒着请求通过的风险.
对于像我这样的谷歌搜索者,我想在这里给出一个简单的解决方案.
我正在使用Rails 4并且需要在部署到heroku时添加一个简单的Rake任务.当我在github中使用'deploy to heroku'按钮时,没有机会在部署后立即运行"heroku run ...".
我做了什么:我扩展了标准的Rake Task'资产:clean',它在部署到heroku期间自动运行.任务仍然正常运行,但我已将自己的东西附加到它的最后.这是通过'增强'方法完成的.在下面的示例中,我添加了一个db:migrate,因为这可能是大多数人想要的:
# in lib/tasks/assets_clean_enhance.rake
Rake::Task['assets:clean'].enhance do
Rake::Task['db:migrate'].invoke
end
Run Code Online (Sandbox Code Playgroud)
我承认这不是完美的解决方案.但是heroku Ruby Buildpack仍然不支持任何其他方式.编写我自己的构建对于这么简单的事情来说似乎有些过分.
| 归档时间: |
|
| 查看次数: |
22924 次 |
| 最近记录: |