还有两个月,就工作满三年了。年后来的北京,找了份工作,公司就我一个后端,当时心里挺担心抗不起来,以前公司有大牛师父一直带我,但觉得现在该挑战一下自我。在此记录一下遇到的各种坑。。。
原项目中没用像 mina、capistrano 这些一键部署方式,都是直接从 github 上直接 pull 代码,执行 bundle、迁移、编译文件等等。以前做项目用的都是 puma+mina+nginx 的部署方式,就用这种方式部署了一下(用 nginx+unicorn+capistrano 部署失败了,以后再研究下)。部署完成后,问题出现了:每次发布一下,去访问页面的时候,半天加载不出来,加载超时,要等个 5 分钟,再访问才可以。
我的第一反应是觉得 gem 引用的问题,因为项目中引用了不少 gem,还有一些第三方的库,而且好多应该在开发环境、测试环境要引用的 gem,在生产环境都引入了;还有就是怀疑项目中 css、js 挺乱的,觉得也是一种可能,但是不知道怎么排查原因。问了一下社区大牛们,大牛们给出了建议及他们的猜想。提到文件预编译的问题,还有服务器内存的问题。我从社区找了一个插件:newrelic_rpm。安转好,发现了问题的原因:第一次访问页面时,引用 application.html.erb 时,用时太长,我将
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
给注释掉后,发现加载慢的问题没了,找到问题了。
根据指点,在环境变量的配置文件中
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.assets.compile = false
config.serve_static_files = false
end
部署时配置 puma 的重启方式为 phased_restart,然后 nginx 中对静态文件做了处理,重新部署了一下,发现问题解决了。谢谢各位帮助我的大牛们 ! 但是后面又出现一个问题,访问网站时,网站的图片都找不到,报 js 错误。
我到服务器对应的目录下看了一下,图片都被 SHA256 指纹处理了,所以访问不到图片。看了一下 guide 关于静态文件编译这一章,找到问题的原因了,将 css 中
.icon-database{
background-image:url(/assets/new_icon/data.png);
}
改成
.icon-database{
background:image-url('new_icon/data.png');
}
附上https://ruby-china.github.io/rails-guides/asset_pipeline.html#precompiling-assets
最后,让坑来的更深一些吧!