Ruby on Rails 生产环境配置的一些问题

公司选择 Spree 电商框架作为基础来进行业务拓展,开发环境运行时十分缓慢,按照官方的建议,将 development.rb 中 config.assets.debug 的配置项设置为 false,一定程度上速度有所提升,但是还是不够明显,看后台日志显示很长时间都被花费在前台页面的渲染上,所以想尝试一下以生产模式运行时性能如何。

直接运行 rails s -e production 在浏览器中打开后报错,查看日志错误显示如下:

The asset "favicon.ico" is not present in the asset pipeline.

项目开启了 asset pipeline,却没有在开启服务器之前进行资源的预编译,执行命令补上这一步,运行结束之后会在 public 生成 assets 文件夹,这部分知识可参考官方文档:

  $ RAILS_ENV=production rake assets:precompile

重新启动服务器之后没有出现 500 错误,但是网站所有图片均无法显示:

Ruby on Rails 生产环境配置的一些问题_第1张图片
图片丢失

根据(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 目录的资源,所以需要打开这一开关。

在搜索过程中,发现有篇博文说的比较详细,给了很大帮助,链接在这。

你可能感兴趣的:(Ruby on Rails 生产环境配置的一些问题)