自动编译资产并使用nginx(开发)为它们提供服务

时间:2015-11-27 11:08:59

标签: ruby-on-rails nginx asset-pipeline

我正在开发一个拥有大量资产的Rails应用程序,但遗憾的是无法减少。在生产中,这不是问题,但在开发过程中,应用服务器(如webrick或Thin)无法快速为每个访问页面提供约20个资产请求。

所以我开始在开发中使用nginx来提供public/assets中的任何内容。请注意,nginx纯粹是一个开发工具 - 我们不打算在生产中使用它。

为了工作,我只需做两件事:

  • config.assets.debug设为false
  • 运行rake assets:precompile

遗憾的是,我的设置存在两个问题(后者是最重要的问题):

  • 每次资产更改都需要再次手动运行rake assets:precompile
  • 要让app服务器获取新编译的资产,我必须重新启动它。

什么是正确的nginx / Asset Pipeline设置,在预编译后不需要重启Rails服务器?

也欢迎自动编译。

2 个答案:

答案 0 :(得分:3)

此设置对我有用:

  • > print(string.format("%15d", mac_int)) 115072593268806
  • 中包含nginx端口
  • config.asset_host
  • config.assets.debug = false
  • config.assets.digest = true
  • 在启动Rails服务器之前,运行config.assets.compile = true
  • 启动Rails服务器
  • 在每次资产更改时,再次运行rm -rf public/assets; rake tmp:clear tmp:cache:clear assets:clean assets:precompile。警卫可以照顾到这一点。

答案 1 :(得分:1)

这可能需要付出很多努力,但考虑转换为gulp或grunt以编译资产。使用节点js可以加速过程显着(很多文章,这里是一个示例http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/)。 还可以在没有服务器重启的情况下编译重要资产(在文件更改[hooks]上触发进程)。在我参与的项目中,我们的一个人正试图进行这种转换,从他所说的我理解它不是一天的任务。