我在基于Rails-4.2的相关应用程序中重用邮件程序,该应用程序最初是为非RoR独立脚本编写的。该脚本将继续作为单独的应用程序运行。但是,最初设计的脚本只使用了活动记录和动作邮件程序。因此,完整的RoR目录结构被截断。应用程序目录不存在,邮件程序放在lib:~/lib/hll_action_mailer/hll_th_forex_mailer
的子目录中,模板放在views子目录中:~/lib/hll_action_mailer/hll_th_forex_mailer/views
邮件程序类包含:
class HllThForexMailer < ActionMailer::Base
. . .
def forex_hll_commercial_rates(
. . .
puts( File.expand_path( 'views', File.dirname( __FILE__ ) ).inspect )
mail( :to => recipients,
:from => fm_address,
:subject => subject,
:template_path => File.expand_path( 'views',
File.dirname( __FILE__ ) )
) do | format |
format.text do render(
# views/hll_th_forex_commercial_rates_notice.text.erb
"hll_th_forex_commercial_rates_notice" )
end
format.pdf do render(
# views/hll_th_forex_commercial_rates_notice.pdf.erb
"hll_th_forex_commercial_rates_notice" )
end
format.html do render(
# views/hll_th_forex_commercial_rates_notice.html.erb
"hll_th_forex_commercial_rates_notice" )
end
end
. . .
运行测试会得到以下结果:
"~/lib/hll_action_mailer/hll_th_forex_mailer/views"
以上来自puts(File.expand_path('views',File.dirname( FILE )).inspect)
错误消息:
缺少模板hll_th_forex_mailer / forex_hll_commercial_rates与{:locale =&gt; [:en],:formats =&gt; [:text],:variants =&gt; [], :handlers =&gt; [:erb,:builder,:raw,:ruby,:coffee,:jbuilder]}。 搜索范围: *“〜/ lib / hll_action_mailer / hll_th_forex_mailer” *“〜/ hll_th_main / app / views”
这里有两件事我不明白:
传递给渲染器的参数是:
“hll_th_forex_commercial_rates_notice”
但寻找的模板是:
hll_th_forex_mailer/forex_hll_commercial_rates
模板名称是调用方法的名称,这是默认值。但我明确地覆盖了这一点。
对mail方法的调用中给出的template_path似乎被忽略或者至少以某种不可思议的方式被排除,以排除'views'子目录。
搜索: *“〜/ lib / hll_action_mailer / hll_th_forex_mailer”
而不是我的预期:
"~/lib/hll_action_mailer/hll_th_forex_mailer/views"
有人可以指出我应该传递给mail方法的内容,以便找到一个名为的模板:
~/lib/hll_action_mailer/hll_th_forex_mailer/views/hll_th_forex_commercial_rates_notice.text.erb
在实现原始脚本时,这些都不是问题所以它肯定是RoR引入的复杂性。
其他信息:
如果我这样做:
mail( :to => recipients,
:from => fm_address,
:subject => subject,
:template_name => "hll_th_forex_commercial_rates_notice",
:template_path => File.dirname( __FILE__ ) + "/views"
)
然后我看到了:
使用“邮件程序”缺少模板〜/ lib / hll_action_mailer / hll_th_forex_mailer / views / hll_th_forex_commercial_rates_notice。搜索到了。
这是我希望它至少看的地方。但是它找不到这个文件:
ll~ / lib / hll_action_mailer / hll_th_forex_mailer / views / hll_th_forex_commercial_rates_notice *
-rw-RW-R--。 1 byrnejb byrnejb 2010年10月20日16:10~ / lib / hll_action_mailer / hll_th_forex_mailer / views / hll_th_forex_commercial_rates_notice.text.erb
当我添加推荐的do block
以查找文本模板时:
mail( :to => recipients,
:from => fm_address,
:subject => subject,
:template_name => "hll_th_forex_commercial_rates_notice",
# :template_path => File.expand_path( '/', 'views',
:template_path => File.dirname( __FILE__ ) + "/views"
) do | format |
format.text
end
然后我看到了:
缺少模板hll_th_forex_mailer / forex_hll_commercial_rates with {:locale =&gt; [:en],:formats =&gt; [:text],:variants =&gt; [],:handlers =&gt; [:erb, :builder,:raw,:ruby,:coffee,:jbuilder]}。搜索范围: *“/ home / byrnejb / Projects / Software / theHeart / code / hll_th_main / lib / hll_action_mailer / hll_th_forex_mailer” *“/ home / byrnejb / Projects / Software / theHeart / code / hll_th_main / app / views”
这会忽略对mail方法的调用中提供的template_path和template_name键。
这件事怎么了?
更多信息。
如果我完全指定template_name:
:template_name => "hll_th_forex_commercial_rates_notice.text.erb",
并消除do |format| block
然后我得到这个结果:
缺少模板 〜/ LIB / hll_action_mailer / hll_th_forex_mailer /视图/ hll_th_forex_commercial_rates_notice.text.erb 与“邮件”。搜索范围: *“/ home / byrnejb / Projects / Software / theHeart / code / hll_th_main / lib / hll_action_mailer / hll_th_forex_mailer / views”
然而这就是ls -l所示:
ls -l~ / lib / hll_action_mailer / hll_th_forex_mailer / views / hll_th_forex_commercial_rates_notice.text.erb
-rw-RW-R--。 1 byrnejb byrnejb 2010年10月20日16:10~ / lib / hll_action_mailer / hll_th_forex_mailer / views / hll_th_forex_commercial_rates_notice.text.erb