公司选择 Spree 电商框架作为基础来进行业务拓展,开发环境运行时十分缓慢,按照官方的建议,将 development.rb 中 config.assets.debug 的配置项设置为 false,一定程度上速度有所提升,但是还是不够明显,看后台日志显示很长时间都被花费在前台页面的渲染上,所以想尝试一下以生产模式运行时性能如何。
直接运行 rails s -e production
在浏览器中打开后报错,查看日志错误显示如下:
项目开启了 asset pipeline,却没有在开启服务器之前进行资源的预编译,执行命令补上这一步,运行结束之后会在 public 生成 assets 文件夹,这部分知识可参考官方文档:
$ RAILS_ENV=production rake assets:precompile
重新启动服务器之后没有出现 500 错误,但是网站所有图片均无法显示:
根据(rails 预编译之后图片无法显示)的关键字搜索之后,进入了 Ruby China 的一篇帖子,看完评论说解决方案是需要进行如下设置:
config.assets.compile = true
重新启动服务器之后确实都正常,但因为刚刚那条配置是打开了实时编译的开关,所以效率会相对较为缓慢,不是最佳的解决方案。仔细看了文章评论之后,发现可能应该是需要打开另外一个配置的开关:
config.assets.compile = false
config.serve_static_assets = true
然后重新执行命令进行预编译,启动服务器,大部分图片都显示出来了,但还是有少部分未显示,调研发现还有一个设置需要配置:
config.public_file_server.enabled = true
重试之后,一切都显示正常了。原因大概是代码中可能有未通过 assets pipeline 的方式进行图片的引用,而是直接请求 public 文件夹下非 assets 目录的资源,所以需要打开这一开关。
在搜索过程中,发现有篇博文说的比较详细,给了很大帮助,链接在这。