其他 部署完毕,第一次访问页面加载太久 (静态文件预编译的问题)

lengcb · 2018年04月24日 · 最后由 rails_taotao 回复于 2018年12月20日 · 7061 次阅读

还有两个月,就工作满三年了。年后来的北京,找了份工作,公司就我一个后端,当时心里挺担心抗不起来,以前公司有大牛师父一直带我,但觉得现在该挑战一下自我。在此记录一下遇到的各种坑。。。

原项目中没用像 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

最后,让坑来的更深一些吧!

1 楼 已删除

不看文档先干活踩坑系列 +1

【毕竟所有干活快的方法,都已经写在文档里了】😹

lengcb Rails 开发环境初次访问 javascript_include_tag 超慢。 提及了此话题。 06月27日 16:59

我也遇到同样的问题,但是我的 staging 静态资源配置和你配置的一样,使用 mina 部署时第一次访问还是很慢

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