Я пытаюсь реализовать отправку электронной почты уведомления от простой службы 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
рубин никогда не использует CamelCase в качестве конвенции. 'uploadNotification' должен вместо этого быть' upload_notification' – OneChillDude
перезагрузить сервер? – OneChillDude
Я попытался перезапустить сервер, также переключился на 'upload_notification' как имя метода, но те же результаты. –