【发布时间】: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-compilation 和 stackoverflow.com/questions/14559615/… 来破解配置?
-
@vemv, + 可能另外清除了nginx的缓存文件夹。
标签: ruby-on-rails nginx asset-pipeline