Rails-4.2邮件程序

时间:2015-10-21 19:32:40

标签: ruby-on-rails actionmailer

我在基于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”

这里有两件事我不明白:

  1. 传递给渲染器的参数是:

    “hll_th_forex_commercial_rates_notice”

  2. 但寻找的模板是:

    hll_th_forex_mailer/forex_hll_commercial_rates
    

    模板名称是调用方法的名称,这是默认值。但我明确地覆盖了这一点。

    1. 对mail方法的调用中给出的template_path似乎被忽略或者至少以某种不可思议的方式被排除,以排除'views'子目录。

      搜索:     *“〜/ lib / hll_action_mailer / hll_th_forex_mailer”

    2. 而不是我的预期:

      "~/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

0 个答案:

没有答案