baa*_*h05 13 git ruby-on-rails heroku
我正在研究一个在Heroku上托管的rails项目.我想知道是否可以更新一个文件,而无需重新启动应用程序.
为什么.我有一个错误,但我无法追踪它.它在我的本地系统上完美运行,但它似乎停止在heroku处理中途.
由于没有断点,我在代码中散布状态更新.(稍后将删除)但是向rails应用程序添加一行代码就像是一个五分钟的过程.
有没有办法推动git而不运行所有其他东西?也许是一个特殊的参数添加到推?
Joh*_*non 27
有一个很好的理由,为什么它不可能.当您推送到Heroku时,它们会生成应用程序的"slug"(https://devcenter.heroku.com/articles/slug-compiler).为了提供Heroku提供的巨大可扩展性,这个slug是只读的,因此它可以在多个dynos上旋转,这些dynos可能分布在许多不同的物理机器上.这些dynos中的每一个都运行一个单独的应用程序实例,而路由网格确保对您的应用程序的请求转到正确的dynos.
现在考虑如果这些实例中的任何一个是可写的会发生什么,如果你运行5个dynos,你的应用程序将在5个单独的实例上运行 - 如果一个文件被写入,那么它是如何分布在你正在运行的dynos中的?是的,Heroku本可以考虑某种共享文件系统来运行应用程序,但这很复杂.通过使文件系统只读(https://devcenter.heroku.com/articles/read-only-filesystem),这个问题得以缓解.
如果你已经构建了一个应用程序并部署到Heroku但忘记使用S3类型的peristant存储,你的应用程序将允许你上传文件(通过类似于Ruby世界的Paperclip)但是上传的资产只会存在于dyno上接收到它,然后在部署新代码或应用程序重新启动时丢失,因为dyno从slug接收到最新的代码.
如果你正在对Heroku进行调试,不要忘记你已经拥有了通常的git武器库git commit --amend
.或者在分支中工作并将其直接部署到Heroku(git push heroku <yourbranchname>:master
),然后当你将问题变量(http://git-scm.com/book/en/Git-Branching-Rebasing)分离到master压缩任何时候承诺你不再需要.