Rails POST不在Heroku上工作但在本地工作

时间:2013-04-11 16:59:03

标签: ruby-on-rails json post heroku

我有一个用于iPad应用的API。控制器接受json并返回json。当我在本地运行服务器时,POST请求工作,我使用ISO模拟器但是当我在部署到heroku后点击POST请求时,我作为JSON发送的所有参数都是零。

观看heroku日志我在发出请求时会收到以下内容。

    at=info method=POST path=/note/update host=myapp.herokuapp.com fwd="174.50.210.40" dyno=web.1 connect=0ms service=755ms status=500 bytes=643
2013-04-11T16:51:30.907621+00:00 app[web.1]:
2013-04-11T16:51:30.908272+00:00 app[web.1]: Processing by MyAPIController#update_note as JSON
2013-04-11T16:51:30.908272+00:00 app[web.1]:   Parameters: {"myapi"=>{}}
2013-04-11T16:51:30.908272+00:00 app[web.1]: Completed 500 Internal Server Error in 551ms

我在我的控制器中的动作看起来像这样。

def update_note

    puts "debug note update #{ params[:note] }"

    uuid = params[:uuid]
    user = User.find_by_uuid(uuid)
    noteid = params[:note][:note_id] if params[:note][:note_id]

    if !user.nil?
      note = nil
        note = user.notes.find(noteid) if !noteid.nil?
        if !note.nil?
            user.notes.find(noteid) 
            note.update_attributes!(params[:note])
        else
            note = user.notes.build(params[:note])
        note.save
        end
        render :json => {:result => note}
    else
        render :json => {:error => "nope"}
    end
  end

我的路径文件包含以下内容

match '/note/update'  =>  'myapi#update_note'

对于熟悉objective-c的人来说,这里是发出请求的代码

NSDictionary *noteVo = [NSDictionary dictionaryWithObjectsAndKeys:note->title, @"title", note->body, @"body", note->note_id, @"note_id", nil];

    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[_dm getUser]->uuid, @"uuid", noteVo, @"note", true, @"remote", nil];

    NSError *writeError = nil;

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&writeError];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
                                    [NSURL URLWithString:[BASE_URL stringByAppendingString:@"note/update"]] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: jsonData];

    [[NSURLConnection alloc] initWithRequest:request delegate:self];

1 个答案:

答案 0 :(得分:0)

我认为你的例子不完整(我无法看到你的Obj-C代码中设置了" myapi" params)

您是否曾尝试使用curl拨打heroku上的API?

我认为以这种方式调试会更容易。