Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何有选择地关闭Rails中的模板缓存?_Ruby On Rails_Templates_Caching - Fatal编程技术网

Ruby on rails 如何有选择地关闭Rails中的模板缓存?

Ruby on rails 如何有选择地关闭Rails中的模板缓存?,ruby-on-rails,templates,caching,Ruby On Rails,Templates,Caching,我使用ActionMailer在后台工作中发送电子邮件。用户可以创建新的电子邮件模板,但在后台作业重新启动之前无法识别这些模板。惯用 ActionView::TemplateFinder.reload! 它强制重新加载模板(现在在2.3.4中已弃用)。我试过了 ActionView::Base.cache_template_loading = false 但这是行不通的 既然用户可以创建(也可能更改)模板,为什么不将它们存储在数据库中并作为内联erb呈现 render :inline =&g

我使用ActionMailer在后台工作中发送电子邮件。用户可以创建新的电子邮件模板,但在后台作业重新启动之前无法识别这些模板。惯用

ActionView::TemplateFinder.reload!
它强制重新加载模板(现在在2.3.4中已弃用)。我试过了

ActionView::Base.cache_template_loading = false

但这是行不通的

既然用户可以创建(也可能更改)模板,为什么不将它们存储在数据库中并作为内联erb呈现

render :inline => template_record.contents
既然我提出了这个建议,我注意到。。。您还可以使用
:inline
手动读取模板并将其传递给ActionView。不过,您必须处理模板不存在的例外情况

render :inline => File.read( ... )

我最后做的是在加载Rails环境之前在后台进程中设置一个全局变量:

$background = true
然后在environments/production.rb中:

config.action_view.cache_template_loading = !$background

虽然不激动,但效果不错。我在后台工作中重新加载了电子邮件模板的模板,但为在线应用程序缓存了视图模板。

我正在使用render_消息构建内容,该消息只采用模板路径和替换变量的散列。Rails 3.0中的邮件代码要好得多,您是否考虑过升级?期待3.0版,但现在不是此应用的选项。