大概在几个月前开始开发一个管理系统,中间为了练手又写了个开源程序 RailsGun
我觉得值得记录的就是从 push 之后的自动化流程了
私有项目也在 github
jenkins 要装 github 插件。接收 github 的触发 hook
当然检测发布分支
为 jenkins 服务器单独添加 deploy keys. 把公钥传给 github 以确保可以 clone 代码
jenkins 有 rvm 插件。ruby 环境就变得很容易了。(刚开始不知道 rvm,手动配环境。终于明白 rvm 有多复杂了。手动配建议用 rbenv)
rails test 我知道我测试单元写的很烂。。对集成测试单元测试的理解还不够
先上代码:
#!/bin/bash
export RAILS_ENV=production
export POSTGRESQL_DATABASE_PASSWORD=97b841a29f151ed58e64c
export SECRET_KEY_BASE=97b841a29f151ed58e64cc2d7aa6c666360a8a470fde108fec2aff7ed103db38ecbaa85a533bd39890b3f83adcb0000274a7e6b3fc36b9b0830dc30b97a2818d
export PATH="$HOME/.rbenv/bin:$PATH:$HOME/.rbenv/shims"
echo $RAILS_ENV
pwd
ruby -v
cd 程序路径/
pwd
if test -e tmp/pids/server.pid
then
echo 'Restarting'
kill `cat tmp/pids/server.pid`
else
echo 'Starting'
fi
bundle install
rake db:migrate
rails assets:precompile
rails server -d
每次覆盖代码运行这个脚本
原理:
程序执行之后会创建./tmp/pids/server.pid 文件。并把 pid 写入里面
我在测试的时候加了这段代码,不然会找不到编译后的 js 和 css
sed -i 's/config.assets.compile = false/config.assets.compile = true/g' config/environments/production.rb
我不太理解 rails 这个默认参数。以后有待补充
摘自个人博客 https://a-wing.top/ruby/2018/03/13/rails_production_deployment.html
如果觉得我的思路有问题请一定要指出,感谢