2013-07-24 6 views
0

Я пытаюсь реализовать отправку электронной почты уведомления от простой службы Ruby on Rails. Я следил за руководством по использованию ActionMailer по адресу http://guides.rubyonrails.org/action_mailer_basics.html и документации по адресу http://api.rubyonrails.org/classes/ActionMailer/Base.html. Я по существу копировал/вставлял код из руководств, но при попытке запустить его я получаю кучу синтаксических ошибок.Ошибки синтаксиса в Rails Реализация ActionMailer

Я искал вокруг, но не сталкивался с кем-либо с той же проблемой. Учитывая это и отсутствие опыта работы с Rails и Ruby, я подозреваю, что у меня может быть что-то принципиальное.

Это мой почтовик:

class NotificationMailer < ActionMailer::Base 
    default from: '[email protected]' 

    def uploadNotification 
    mail(to: "[email protected]", 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: '[email protected]' 
      ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ':', expecting ')' 
mail(to: "[email protected]", subject: "Upload Notification") 
     ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ',', expecting kEND 
mail(to: "[email protected]", subject: "Upload Notification") 
          ^
/Users/jimmcgowan/Sites/RoR/upload/app/models/notification_mailer.rb:5: syntax error, unexpected ')', expecting kEND): 

Чтобы попытаться выполнить более простой тест, я удалил строку «default from:», заменил вызов mail() внутри метода uploadNotification с простым журналом, и изменил код вызова только на NotificationMailer.uploadNotification. Однако это вызвало NoMethodError.

Может ли кто-нибудь дать мне несколько указателей на то, где я ошибаюсь?

Update

кажется, что bgates ответ является правильным, и это вызвано синтаксическими отличиями версии 1.8 и 1.9 рубина. Тем не менее, обновление Ruby-установки на моем размещенном виртуальном сервере (запуск старой версии Suse) было непрактичным, поэтому вместо этого я переписал класс как совместимый с Ruby 1.8. Ради архивов, вот рабочая версия:

class NotificationMailer < ActionMailer::Base 
    def uploadNotification 
    from "My Server <[email protected]>" 
    recipients "[email protected]" 
    subject "New Notification" 
    end 
end 

И я называю это так:

NotificationMailer.deliver_uploadNotification 
+0

рубин никогда не использует CamelCase в качестве конвенции. 'uploadNotification' должен вместо этого быть' upload_notification' – OneChillDude

+0

перезагрузить сервер? – OneChillDude

+0

Я попытался перезапустить сервер, также переключился на 'upload_notification' как имя метода, но те же результаты. –

ответ

0

Вещи это жалующихся раньше синтаксические ошибки в Ruby, 1.8.x. Если вы наберете

$ ruby -v 

в командной строке, и вы получите число меньше, чем 1.9, вам необходимо обновить Ruby, до более новой версии.

+0

Это может быть проблема, у меня 1.8.7. Но так как я на OS X, кажется, обновление требует небольшой работы. На данный момент сайт для версии RVM для графического интерфейса OSX отсутствует, но как только он будет создан, я обновлю Ruby и посмотрю, что произойдет ... –

0

Я хотел бы сделать что-то вроде этого:

class NotificationMailer < ActionMailer::Base 
    default from: "Mydomain <[email protected]>", 
      return_path: "Mydomain <[email protected]>" 

    def upload_notification 
     mail(:to => "[email protected]", 
      :subject => "Upload Notification") 
    end 
end 

и затем вызвать его с Поставлять вместо .send

NotificationMailer.upload_notification.deliver 
+0

Я все еще получаю синтаксическую ошибку в двоеточии в 'default from : 'line, хотя теперь кажется, что теперь с синтаксисом в вызове mail(). Я попробую еще раз после обновления Ruby. –

Смежные вопросы