看板 Ruby 關於我們 聯絡資訊
環境: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 &lt; 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)
shelary:光用 xxx.new 是不會新增一筆的..還要 xxx.save 才會存 05/10 09:54
shelary:或是用 xxx.create (這代表 .new + .save) 05/10 09:54
godfat:如果 Z 有出來,那科應該會出來才對,有 exception? 05/10 18:02
godfat:等等,你根本寫錯了吧? XD def self.receive 才對 05/10 18:06
prelight:謝謝1F 真的是如此 3F的朋友請問用不用this有差嗎? 05/12 00:10
prelight:還是說與ruby版本有關 不然為什麼網頁要這樣寫呢@@? 05/12 00:10
godfat:instance method 和 class method 的差別 05/12 01:54
godfat:網頁我現在讀不出來..MailReader.receive(m)是class method 05/12 01:56
godfat:你定義 def receive 是 instance method, 本不會被呼叫 05/12 01:57
prelight:嗯嗯 這個概念與java似乎一樣  那我了解了。感激:) 05/12 12:12
godfat:可以先這樣想,在看 class 也是一種 instance 之前 05/12 14:10