【问题标题】:Compile assets automatically and serve them with nginx (development)自动编译资产并使用 nginx 提供服务(开发)
【发布时间】:2016-03-01 13:52:30
【问题描述】:

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

所以我开始在开发中使用 nginx 在public/assets 中提供任何服务。请注意,nginx 纯粹是一种开发工具——我们不打算在生产中使用它。

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

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

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

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

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

也欢迎自动编译。

【问题讨论】:

  • 您是否尝试过其他 Rails 服务器,例如 Unicorn 和 Puma?您始终可以使用Guard 监控文件更改并运行rake assets:precompile 并重新启动您的服务器。
  • +1 表示警卫。 Unicorn/Puma 不是专门的 HTTP 服务器(尤其是 Unicorn,它通过设计假定快速客户端),所以如果可能的话,我更愿意使用 nginx 作为资产。
  • 这听起来有点像你已经超出了资产管道 - Rails 并不是真正为开发中的静态资产而构建的 - 它应该在部署时完成。所以重启服务器会很麻烦。因此,您可以考虑使用例如 grunt 或 broccolli 来简化您的资产。
  • @vemv,它被列为用于生产,但也许您可以通过组合 guides.rubyonrails.org/asset_pipeline.html#live-compilationstackoverflow.com/questions/14559615/… 来破解配置?
  • @vemv, + 可能另外清除了nginx的缓存文件夹。

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


【解决方案1】:

这个设置对我有用:

  • config.asset_host中包含nginx端口
  • config.assets.debug = false
  • config.assets.digest = true
  • config.assets.compile = true
  • 在启动 Rails 服务器之前,运行 rm -rf public/assets; rake tmp:clear tmp:cache:clear assets:clean assets:precompile
  • 启动 Rails 服务器
  • 在每次资产更改时,再次运行 rake assets:precompile。 Guard 可以解决这个问题。

【讨论】:

    【解决方案2】:

    这可能需要付出很多努力,但请考虑切换到 gulp 或 grunt 以编译资产。使用 node js 可以加速这个过程显着(很多文章都在上面,这里有一个例子http://blog.carbonfive.com/2014/05/05/roll-your-own-asset-pipeline-with-gulp/)。 并且重要的资产可以在不重新启动服务器的情况下编译(文件更改[钩子]触发的过程)。在我参与的项目中,我们的一个人正试图做出这种转变,从他所说的我明白这不是一天的任务。

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2011-12-22
      • 2021-06-07
      相关资源
      最近更新 更多