【问题标题】:Syntax errors in Rails ActionMailer implementationRails ActionMailer 实现中的语法错误
【发布时间】:2013-07-26 05:58:18
【问题描述】:

我正在尝试从一个简单的 Ruby on Rails 服务向自己发送通知电子邮件。我一直在关注http://guides.rubyonrails.org/action_mailer_basics.html 上关于使用 ActionMailer 的指南和http://api.rubyonrails.org/classes/ActionMailer/Base.html 上的文档我基本上复制/粘贴了指南中的代码,但是当我尝试运行它时出现了一堆语法错误。

我已经四处搜索,但没有遇到任何遇到同样问题的人。鉴于这一点以及我缺乏使用 Rails 和 Ruby 的经验,我怀疑我可能遗漏了一些基本的东西。

这是我的邮件:

class NotificationMailer < ActionMailer::Base
    default from: 'info@mydomain.com'

  def uploadNotification
    mail(to: "jim@mydomain.com", subject: "Upload Notification")
  end
end

我这样称呼它:

NotificationMailer.uploadNotification.send

当应用尝试调用该方法时,我收到以下错误:

SyntaxError (/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:2: syntax error, unexpected ':', expecting kEND
default from: 'info@mydomain.com'
             ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ':', expecting ')'
mail(to: "jim@mmydomain.com", subject: "Upload Notification")
        ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ',', expecting kEND
mail(to: "jim@mmydomain.com", subject: "Upload Notification")
                              ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ')', expecting kEND):

为了尝试进行更简单的测试,我删除了“default from:”行,将 uploadNotification 方法中的 mail() 调用替换为一个简单的日志,并将调用代码更改为仅 NotificationMailer.uploadNotification。但是,这反而导致了 NoMethodError。

谁能给我一些关于我哪里出错的指示?

更新

bgates 的答案似乎是正确的,这是由 Ruby 1.8 和 1.9 版本的语法差异引起的。但是,在我的托管虚拟服务器(运行旧版本的 Suse)上升级 Ruby 安装是不切实际的,因此我重新编写了类以兼容 Ruby 1.8。为了存档,这里是工作版本:

class NotificationMailer < ActionMailer::Base
  def uploadNotification
    from "My Server <info@mydomain.com>"
    recipients "jim@mydomain.com"
    subject "New Notification"
  end
end

我这样称呼它:

NotificationMailer.deliver_uploadNotification

【问题讨论】:

  • ruby 从不使用驼峰式作为惯例。 uploadNotification 应该是 upload_notification
  • 我尝试重新启动服务器,也切换到upload_notification作为方法名称,但结果相同。

标签: ruby-on-rails actionmailer


【解决方案1】:

它抱怨的东西曾经是 Ruby 1.8.x 中的语法错误。如果你输入

$ ruby -v

在命令行中,如果得到小于 1.9 的数字,则需要将 Ruby 更新到较新的版本。

【讨论】:

  • 这可能是问题所在,我有 1.8.7。但由于我在 OS X 上,升级似乎需要一些工作。 RVM 的 OSX GUI 版本的站点目前似乎已关闭,但一旦它备份,我将更新 Ruby,看看会发生什么......
【解决方案2】:

我会这样做:

class NotificationMailer < ActionMailer::Base
    default from: "Mydomain <info@mydomain.com>",
            return_path: "Mydomain <info@mydomain.com>"

    def upload_notification
      mail(:to => "jim@mydomain.com", 
           :subject => "Upload Notification")
    end
end

然后用 .deliver 而不是 .send 调用它

NotificationMailer.upload_notification.deliver

【讨论】:

  • 我仍然在default from: 行的冒号上看到语法错误,尽管现在使用 mail() 调用中的语法似乎没问题。我会在更新 Ruby 后重试。
猜你喜欢
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多