【问题标题】:Rendering an externally modified file in Rails在 Rails 中渲染外部修改的文件
【发布时间】:2009-06-07 15:25:45
【问题描述】:

我有一个 cron 作业,每十分钟解析几个 XML 提要,并使用 render: file 方法创建一些要包含在 Rails 项目的每个页面上的部分内容。问题是,很明显,它们在服务器重新启动之前不会刷新。

无论如何,我该怎么做才能强制rails每次都刷新这个文件?

提前致谢。

【问题讨论】:

    标签: ruby-on-rails xml rendering cron


    【解决方案1】:

    改用:

    render :inline => File.read(file_name), :layout => true
    

    【讨论】:

      【解决方案2】:

      我认为你在滥用渲染(:文件)。这绝对不是它的预期用途。渲染部分应该用于在多个位置渲染模块化的 erb(或您使用的任何模板语言)代码,而不是数据加载技术。您正在使用它(看起来)来加载动态变化的数据。

      我认为您真正想做的是片段缓存,但如果没有更多上下文,我可能会错。

      有关片段缓存的精彩演练:http://www.railsenvy.com/2007/3/20/ruby-on-rails-caching-tutorial-part-2

      您的 cron 作业可能会运行一个脚本/运行器脚本,该脚本会创建您要缓存的片段。

      如果我不在此处,请尝试澄清您正在加载的文件类型以及您要完成的任务。

      【讨论】:

      • 我同意。听起来像片段缓存可以完成这项工作。让 cron 作业使片段缓存过期,然后 erb 将运行,它们将在下次显示时被缓存。
      【解决方案3】:

      这是因为在生产模式下,Rails 兑现了它的所有类和视图/部分。为了解决这个问题,您可以在片段缓存块中渲染您的部分,并在您想要刷新块内容时使用方法 expire_fragment。其他方式可以切换到开发模式,但这会使您的应用程序变慢。

      【讨论】:

      • 解决方案肯定不在开发中运行应用程序。这是一个可怕的想法。一个不那么糟糕但仍然很糟糕的想法是在生产中打开类重新加载,但这几乎是最坏的情况。
      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多