我正在使用不同的rails应用程序处理应用程序。 我们正在快速移动并经常向每个代码推送代码......每个堆栈依赖于另一个(我们有内部API)
在这种情况下,我找不到任何带有最佳做法的文章。
我是否应该在同一个git repo中拥有所有应用程序,每个堆栈都是子模块? 我部署时应该总是将所有堆栈部署在一起吗?
无论如何,这听起来像是一个非常常见的问题,但我找不到任何关于它的好文档。
答案 0 :(得分:0)
您希望使用git
将您的应用程序推送到您的服务器,how Heroku
does it
我们已经在Rackspace自己的堆栈上实现了这个功能,我们必须做几件重要的事情才能让它工作。
<强>部署强>
根据经验:
应用程序的部署与代码更新不同。 虽然我不知道技术术语,但我知道知道如果 您将代码推送到单个应用程序,这将完全不同 到&#34;部署&#34;多个应用程序。
为此,我建议将两个过程分开处理。 IE应该只将代码推送到特定的存储库,并部署&#34;应用程序&#34;如你所愿。
由于您没有详细说明堆栈的具体内容,请根据我们使用自己的RackSpace堆栈的工作情况,向您提供解释。
<强> GIT中强>
您正在寻找的主要内容是git
- 这将使您能够执行"single click deploy":
诀窍是在服务器上创建一个bare
存储库(与Github&amp; Heroku一样),然后让你能够“推送”#34;你的代码到这些钩子。为此,您需要做几件事(即设置git
repo,在服务器上路由它,然后创建任何post-receive hooks
来管理部署:
-
裸露的回购
第一步是设置bare repo
,可以非常简单地完成
如果您通过SSH连接到EC2实例,只需运行以下命令:
$ git init --bare /git/your_app.git
这将为您提供一个存储库,然后您可以推送&#34;你的代码。这个和一个工作存储库之间的区别在于裸机没有任何文件 - 只是参考文献和其他信息。诀窍是use a hook
创建一个工作目录,然后您可以使用该目录来运行您的应用程序。
裸仓库将允许您推送所需的代码,并基本上为您提供Github&amp;其他人拥有 - 发送&#34;的能力你的代码简洁明了。
-
<强>主机强>
其次,你需要能够&#34;路由&#34;任何对这个git repo的请求,以及其他git repos你也有。为此,您需要使用您的网络服务器捕获任何请求。以下是使用Nginx的方法:
#/etc/nginx/sites-available/git
server {
listen 80;
server_name your_domain.com;
root /git;
auth_basic "RESTRICTED ACCESS";
auth_basic_user_file /etc/nginx/.htpasswd;
location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive$
root /gitk;
client_max_body_size 100M;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /git;
fastcgi_param PATH_INFO $uri;
fastcgi_pass unix:/var/run/fcgiwrap.socket
include fastcgi_params;
}
}
您希望use htpasswd to create an authentication file(尚未为此创建授权),然后您应该允许您在本地处理以下内容:
> git remote add production http://your_domain.com/your_repo.git
> git add .
> git commit -a -m "Production"
> git push production master
这将要求您进行身份验证,您必须使用auth
文件中提供的详细信息进行身份验证。
-
<强>挂钩强>
最后,您可以使用许多git hooks来创建&#34;部署&#34;机制。通常,您使用post-receive
:
#git/your_app.git/hooks
cd /app/your_app
git --work-tree=${APP_PATH} --git-dir=${GIT_DIR} checkout -f
bundle install
touch tmp/restart.txt
这显然是非常基本的。你可以随心所欲地制作它,如果你愿意,甚至可以组合其他的回购!
希望这会给你一些想法!