Cloudmailinアドオンを使用して、Herokuアプリから電子メールを受信しています。ただし、Cloudmailinは配信できませんでした。つまり、Herokuから毎回500を取得します(したがって、アドレスは正しいです)。
Herokuログのエラーは
Started POST "/incoming_mails" for 109.107.35.53 at 2013-02-27 08:54:22 +0000
2013-02-27T08:54:23+00:00 app[web.1]: Entering the controller! Controlling the e-mail!
2013-02-27T08:54:23+00:00 app[web.1]:
2013-02-27T08:54:23+00:00 app[web.1]: NoMethodError (undefined method `[]' for nil:NilClass):
2013-02-27T08:54:23+00:00 app[web.1]: app/controllers/incoming_mails_controller.rb:7:in `create'
私のルーティングは正しいです。「コントローラーに入る!電子メールを制御する!」クラスの最初のプットから来るので、クラスは間違いなく入ります。
# routes.rb
post '/incoming_mails' => 'incoming_mails#create'
ファイル自体は次のようになります。
# /app/controllers/incoming_mails_controller.rb
class IncomingMailsController < ApplicationController
skip_before_filter :verify_authenticity_token
def create
puts "Entering the controller! Controlling the e-mail!"
Rails.logger.info params[:headers][:subject]
Rails.logger.info params[:plain]
Rails.logger.info params[:html]
if User.all.map(&:email).include? params[:envelope][:from] # check if user is registered
@thought = Thought.new
@thought.body = params[:plain].split("\n").first
@thought.user = User.where(:email => params[:envelope][:from])
@thought.date = DateTime.now
if @thought.save
render :text => 'Success', :status => 200
else
render :text => 'Internal failure', :status => 501
end
else
render :text => 'Unknown user', :status => 404 # 404 would reject the mail
end
end
end
UserとThoughtは、他の場所で問題なく使用されるデータベースリソースです。保存手順は、scaffoldで生成されたThoughtコントローラーで機能する手順と同じです。CloudmailinRails3の例からコピーしたparams
andロジック。Rails.logger
私は本当に混乱しています-どこが間違っているのですか?ポインタをいただければ幸いです。