最近在做一个管理rails项目的项目,实现效果能控制其他项目更新代码切换分支(git),并重启server。
基础思路为执行linux的bash命令:
<pre>
#例如进入指定项目去更新最新代码
%x{/bin/bash -l -c 'cd #{path} && git pull '}
</pre>
给这些命令写好封装在指定的action里面,就可以进行代码的任意切分支/更新等等操作
而每一步执行的结果可以放在一个文件内,顺序执行去读:
<pre>
%x{/bin/bash -l -c 'cd #{path} && git fetch && git branch -a > #{branch_text_file_path}'}
branch_text = IO.read result_text_file_path
</pre>
如需要输出所有的log可以用 git pull > result.txt 2>&1
的方式
git命令写完以后就是执行迁移以及重启server,这里我碰到了很大的阻碍,搭建这个管理项目的环境为ruby-2.1.4 + rails 4.2... 在执行rake db:migrate的时候一直在报错:
../gems/bundler-1.12.5/lib/bundler/spec_set.rb:95:in `block in materialize': Could not find rake-11.2.2 in any of the sources (Bundler::GemNotFound)
调试了很长时间,输出了 which -- rake 的结果,也是对应项目的gem位置的rake,手动进目录执行rake也不会报错,换了几个项目都是如此……最终得出结论,这个项目每次在进到别的项目目录执行命令时,都会给本项目的gemfile.lock带着去检查另一个项目的gem包,所以不管怎么执行都会报错,除非两个项目的gemfile一样!
接下来就是漫长的调试之路:尝试了sidekiq、写rake任务,写shell脚本,写ruby脚本,写java脚本……发现都是一直报错,whenever倒是可以,但是whenenver是定时任务,最短间隔是1分支,并且很不好用,没有即时性,所以这些方案都放弃了
最终突然想到了rails2项目好像不用gemfile,于是尝试了一下,果然成功 - -
调整成rails2 以后,跑rake, unicorn……等等其他命令果然全部ok!
网友评论