作者prelight (失敗者)
看板Ruby
標題[問題] 無法呼叫成員函式?
時間Sun May 10 07:48:05 2009
環境:Ruby 1.8.6 Rails 2.3.2
狀況:依照這一篇文章
http://0rz.tw/MzM5Q去實做,因為一直無法run起來(沒有error)
但是無法將資料新增到database,以下為簡化的code(排錯0rz)
在 app/models/mail_reader.rb中
# app/models/mail_reader.rb
require 'net/pop'
class MailReader < ActionMailer::Base
def receive(email)
p "kerkerker"
#Q:這行都不會被執行0rz,不知道為什麼?
task = Task.new({:name => email.subject, :description => email.body})
end
def self.check_mail
logger = RAILS_DEFAULT_LOGGER
logger.info "Checking for emails..."
Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
#This line raises error if ruby version < 1.8.7
#因為使用的是1.8.6所以本來執行會有error msg但是後來
#我有去下載Ruby1.9的pop然後放到/usr/local/lib/ruby/1.8/net/下
#就沒有error
Net::POP3.start("pop.gmail.com", 995, "account", "passwd") do |pop|
if pop.mails.empty?
begin
logger.info "No emails found."
end
else
pop.mails.each do |email|
begin
mail = TMail::Mail.parse(email.pop)
p "Zeeee~~~"
MailReader.receive(mail)
email.delete
rescue Exception => e
logger.error "[" + Time.now.to_s + "] " + e.message
end
end
end
end
logger.info "Done."
end
end
執行方式./script/runner MailReader.check_mail
目前就是確定有信的話他真的會印出Zeeee~~~,而且可以正確印出header等訊息(有先
debug)但是沒辦法印出receive裡面的kerkerker 0rz,不知道為什麼?想請教依下大
家
謝謝。
附錄:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.100.191
※ 編輯: prelight 來自: 114.45.100.191 (05/10 07:53)
※ 編輯: prelight 來自: 114.45.100.191 (05/10 07:54)
※ 編輯: prelight 來自: 114.45.100.191 (05/10 07:54)
1F:→ shelary:光用 xxx.new 是不會新增一筆的..還要 xxx.save 才會存 05/10 09:54
2F:→ shelary:或是用 xxx.create (這代表 .new + .save) 05/10 09:54
3F:→ godfat:如果 Z 有出來,那科應該會出來才對,有 exception? 05/10 18:02
4F:→ godfat:等等,你根本寫錯了吧? XD def self.receive 才對 05/10 18:06
5F:→ prelight:謝謝1F 真的是如此 3F的朋友請問用不用this有差嗎? 05/12 00:10
6F:→ prelight:還是說與ruby版本有關 不然為什麼網頁要這樣寫呢@@? 05/12 00:10
7F:→ godfat:instance method 和 class method 的差別 05/12 01:54
8F:→ godfat:網頁我現在讀不出來..MailReader.receive(m)是class method 05/12 01:56
9F:→ godfat:你定義 def receive 是 instance method, 本不會被呼叫 05/12 01:57
10F:→ prelight:嗯嗯 這個概念與java似乎一樣 那我了解了。感激:) 05/12 12:12
11F:→ godfat:可以先這樣想,在看 class 也是一種 instance 之前 05/12 14:10