部署 有没有使用 capistrano 的个人站长?有没有觉得这种部署方式很慢?

ddyy · 2014年05月05日 · 最后由 lina 回复于 2014年05月06日 · 3318 次阅读

个人网站跟企业开发很不一样,没有测试,没有产品经理,想到哪写到哪,哪天心血来潮想改动一个地方打开 ftp 就在线修改了,那是在个人站长风风火火的时代,用的是 php

rails 的便捷不言而喻,但 rails 的部署却有些麻烦,有时候我有了新的想法,修改了几行 rails 代码甚至仅仅修改了几个字符,也要跑一遍 capistrano,一次要好几分钟,感觉好笨重啊

要跑也是电脑跑,你可以同时干别的。

如果是紧急修改,再长时间也得部署。如果不是,你做事还得有规范,有计划,不能随意性太强。

是慢,不过用的人多,我相信一定有道理。

#1 楼 @billy 在自己电脑里跑还得填充模拟数据,很麻烦,那种在线对着生产环境写程序的感觉很爽,很容易来灵感

@ddyy, 有灵感可以记下来,不紧急的话分门别类实施。另外你如果实在喜欢生产数据,也可以写一个 rake 命令把服务器数据拉到本地,隔一段时间拉一次就行了。

当哪天改错几个文件,要及时回滚的时候,就知道它的好处了

#3 楼 @ddyy 哇,万一一个 reset……

php 和 rails 不一样吧,php 改完就可以看到效果。rails 要重启进程这些。用 cap 还是更方便。

#3 楼 @ddyy 你可以对着生产环境写啊,没有人逼你用 capstrano 的。SSH 到生产机器上随便改就是了。

#8 楼 @blacktulip 本来打算用 git push 到生产环境的 (这样甚至比 ftp 还要快),但是 rails 还有其他的一堆事情,比如 The Asset Pipeline,就是 sass 编译成 css 还要给 css 文件一个随机数的名字,比如 global-908e25f4bf641868d8683022a5b62f54.css。 migration 倒不是问题,大不了登陆服务器运行 migration 命令,再说日常的小改动基本不涉及数据库

#9 楼 @ddyy Asset Pipeline 也不是必须用的

#10 楼 @blacktulip 恩,看了下,貌似 RAILS_ENV=production bundle exec rake assets:precompile 也能解决 Assets Pipeline 的问题。

每次运行 capistrano 的时候,都觉得好傻,明明只修改了几个字符,还要运行 assets:precompile、检查服务器端的 gem、运行 migration、删除服务器旧的目录版本、建立新的目录版本、给附件文件夹设置软连接。。。等等等等等

我感觉慢归慢,但是还是靠谱的。 反正 heroku 部署的时候有你说的一切问题, 比如慢,比如任何时候都要 assets:precompile 等等。 但是我感觉你应该在本地都测好了,上传的时候干点别的事情就完了。

@ddyy

每次运行 capistrano 的时候,都觉得好傻,明明只修改了几个字符,还要运行 assets:precompile、检>查服务器端的 gem、运行 migration、删除服务器旧的目录版本、建立新的目录版本、给附件文件夹>设置软连接。。。等等等等等

用 Capistrano 本来通过执行一系列内置或自定义的脚本来解决这些问题的,让部署工作从重复繁琐中解放出来。你觉得你不需要这些,说明你不需要使用 Capistrano。另外,运行 assets:precompile, bundle install, migration 这些步骤并不是必须执行的,完全可以通过配置关掉。

我是个人站长,假设个最简单的场景:

帖子出现了“言论自由”这个敏感词,需要修改程序替换成“畅所欲言”,如果在本地测试,需要先注册个用户,然后用这个用户登录,发表带有“言论自由”这个词的帖子,然后才能测试程序。在线开发的话场景都是现成的,不用自己再填充内容了。

我举得这个例子是最简单的例子,还有的场景比这个复杂的多,涉及的到很多情况,作为个人站长,在本地模拟服务器上的场景要做的工作太多了,严重分散精力。

@ddyy 你和@blacktulip 一样都是肉测派的。其实这个场景写个测试挺简单的啊。

#15 楼 @billy 个人网站跟企业开发不一样,企业有产品经理负责产品的规划,程序员只负责实现产品经理的想法,按产品经理的需求先写测试再写代码。个人网站一个人负责所有环节,必须自己参与到用户中去,在网上跟用户互动,在互动中解决问题寻找灵感,没有那么多精力放在测试上,肉测也比较容易找到产品的感觉

原来怎么整,现在继续怎么整

简单的更新可以直接在 cap 写个任务 登陆服务器 直接更新代码就完事 我是这么干的

不都是在本地开发 OK 了才发布到正式环境吗,再说本地搭一次以后想怎么改怎么改,上服务器改测试岂不是会产生大量的测试数据?

估计论坛里正规军太多,不能理解 PHP 时代的野战军站长,这些站长一般都是全站 (栈)“工程师”,用 Rails 的确要受很多“窝囊气”,

PHP 简单,直接,一个 PHP 文件能搞定 MySql 连接,数据处理,外加所谓模板。改起来相当方便,边改边 F5。

这就像镰刀和收割机,你开动收割机就为了割一把稻子,当然觉得费劲啦

#20 楼 @Peter 其实我也喜欢 php 那种快感!

楼主显然合适使用 PHP 阿……

非要用 Rails 的话,在服务器上装个 TMUX + VIM 做开发吧,一改完就 kill -12 重启下 puma ……

如果出问题需要回滚,就不会觉得 capistrano 慢了。

匿名 #24 2014年05月05日

觉得 cap 慢的话试试 mina 吧

没觉得慢啊,经常性的改个 css 也重新发布一次,最高记录估计有一天发布一百多次,3 命今就搞定,感觉比开 ftp 神马的方便多了

cap 是针对复杂的部署场景而设计的,比如多个服务器,许多复杂的配置…

如果你的环境简单,可以不用的,两年前我基本上是 git pull 过去的

个人站长不需要用 Capistrano,没改 asset 就直接 git pull && thin restart,改了就加一句 RAILS_ENV=production rake assets:precompile

使用 git 的 hooks 当代码改动完(push)的时候自动部署 github 好像支持 web hooks 具体怎么调用没研究过,用过在 git 服务器上设置 hooks 来自动部署

还好吧 这玩意儿又不是每小时发布一次

公司项目用 capistrano,个人网站用 mina

mina 的优势就是快,劣势就是不能针对集群发布。 我曾经试图给 mina 加上集群发布功能,但发现做到最后就是 capistrano,必然会放弃速度来保证集群整体的正确和一致,于是放弃。

#14 楼 @ddyy 你可以本地编译,提交到 git 上,发布的时候,你可以有选择的略过 precompile bundle install,速度就快了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号