【发布时间】:2014-02-22 00:40:09
【问题描述】:
我目前在我的本地 git 存储库上设置了一个 EC2 实例的远程。推送有效。
git push remote_name master
Delta compression using up to 4 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (12/12), 896 bytes | 0 bytes/s, done.
Total 12 (delta 6), reused 0 (delta 0)
To user_name@dns:eko_web.git
4342c41..7bbc7db master -> master
当我 ssh 进入远程 EC2 时,我可以找到我通过我的应用复制到 var/app/current/ 的第一个推送,但没有进一步的更新。当我查看我的裸 git repo 时,我会在我做 git show HEAD:<some_file> 时找到我最近的推送。当我在 var/app/current 中手动编辑视图时,更改不会反映在我的网站中;我只看到相同的初始推动。我在裸 git repo 的 post-receive 中有一个挂钩设置,如下所示:
#!bin/sh
GIT_WORK_TREE=/var/app/current git checkout -f
作为一个广泛的概述,我使用以下教程让我走到了这一步。 http://myrailslearnings.wordpress.com/2013/02/19/getting-ec2-to-use-git-for-rails-app/http://www.lovholm.net/2013/06/26/push-your-code-onto-your-ec2-instance-with-git/
感谢您对此的任何想法!
编辑:
根据 Rico 的建议,我启动了一个尚未使用 Beanstalk 初始化的新实例。我现在在实例上有一个 git repo,它(手动更新时)反映了服务器上的更改。但是我仍然无法远程推送到该位置;它显示成功推送,但文件在那里但未提交。如果我手动提交它们然后重新启动服务器,则网站会更新。
【问题讨论】:
-
你服务器上的 git repo 是裸 repo 吗?裸仓库不保存文件,只保存提交历史记录,因此它不能用作工作树。您应该在服务器上执行 git clone。看来您正在重新发明轮子。 Rails 世界有一个部署代码的标准:看看github.com/capistrano/capistrano
-
是的,git repo 是裸露的。但是 var/app/current 不是并且确实包含我的应用程序的完整版本;只是从第一次推动。要学习的东西太多了,我试图不让 AWS(之前只使用 Heroku)和部署工具 atm 不知所措。如果我 git clone 进入服务器,那么我会将 GIT_WORK_TREE 设置为该位置吗?我看不出它实际上是如何更新网站本身的......为什么它第一次工作?
标签: ruby-on-rails git amazon-web-services amazon-ec2