工程代码直接放在 github 上,capistrano 部署也直接用 github 的库。
代码可以开放,但是里面配置的密码一般怎么处理?比如 config/init 下面的加了文件设置 mail 的帐号密码之类,如果不公开密码,但是又能用这个库自动部署?
用 .gitignore 排除文件,需要的文件 copy 成 config.example.yml
这样
或者将密码之类的东西用环境变量来存放
https://github.com/ruby-china/ruby-china/blob/master/config/deploy.rb
capistrano 部署过程将服务器上面配置好的文件软链接到需要的位置
#4 楼 @NonTwitter 私库的话我直接在自己服务器上有 git 库服务,没有搭前台界面(因为没需求,命令行够用了),只是有时候 github 之类的要比我的服务器活更久更保证文件不会丢哈(放个人代码更方便)。
#4 楼 @NonTwitter 其实也可以直接引用本地的 git 源,在内网就是这么做的
set :scm, :git
set :repository, '.'
set :deploy_via, :copy
set :copy_cache, true
#4 楼 @NonTwitter 其实没用过 bitbucket,见笑了。刚才去看了,可以用。对于我这种没时间折腾的,往往找方案直接用最主流的,就一直 github 了,没研究过其它的。
#10 楼 @diudiutang 对我放外网更方便,到哪都可以随获取随时用,特别我有自己服务器免费外网 ip 和机房给我用。
我的做法是代码放 github,但是 capistrano 的 Capfile 放本地,然后写一个 task,用 sed 来替换:
namespace :deploy do
desc "change prod config"
task :change_prod_config do
cmd = "cd #{fetch(:latest_release)} && sed -i 's/DEFAULT_PWD/REAL_PWD/g' config/environments/production.rb"
run cmd
end
end
这样好处是可以在本地用默认配置,方便有时候需要本地进行 production 的模式测试。真正的密码只掌握在负责部署的人,改了密码的话,只用改他本地 Capfile 里面配置即可。
capistrano 的话,可以用 upload 方法,部署的时候把本地的文件拷贝上去 https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-File-Transfer-Upload