connectionDidFinishLoading在didReceiveData之前调用rails生产发送照片

时间:2012-02-28 01:27:52

标签: iphone ruby-on-rails-3 amazon-web-services nsurlconnection carrierwave

我有一个rails 3.0.3网站,在开发模式下,通过调用didReceiveData然后调用connectionDidFinishLoading来响应HTTP GET,并将照片数据从网站发送到iPhone并正确显示。但是当我在Amazon Web Services上以生产模式运行rails 3.0.3网站时,在didReceiveData之前调用connectionDidFinishLoading。我正在使用carrierwave来处理开发和生产轨道站点的照片。

有没有人知道在didReceiveData之前是什么原因导致connectionDidFinishLoading被调用?

我试过检查以下内容:

1)我确保为类'interface。

调用NSURLConnectionDelegate

2)didReceiveResponse在connectionDidFinishLoading和statusCode = 200之前没有被调用。

3)在rails应用程序中,我使用send_file发送照片数据,生成中发送的文件的路径是实际照片。

4)检查网站的完整请求显示,使用connectionDidFinishLoading中的以下代码从生产网站返回0字节的数据(原来这是didReceiveData未被调用的原因):

NSData *returnedData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://production_website"]];

以下是didReceiveData的代码:

// theConnectionData is an instance variable defined as:

      NSMutableData  *theConnectionData = [[NSMutableData data] retain];


-(void)connection:(NSURLConnection *)con didReceiveData: (NSData *)data {

[theConnectionData   appendData:data ];

}

更新 - 我认为问题可能在轨道方面。以下是我用于将rails应用程序中的照片从AWS上的本地存储发送到iPhone应用程序的代码:

  @p       = Photo.find_by_user_id(user_id)
  uploader = @p.avatar
  uploader.retrieve_from_store!(File.basename(@p.avatar.url))
  uploader.cache_stored_file!

      send_file(uploader.file.path,
                :disposition   => 'inline',
                :encoding      => 'binary',
                :type          => @p.content_type,
                :stream        => false,
                :filename      => URI.encode(@p.filename),
                :x_sendfile    => true,
                :buffer_size   => 16384
                )

任何人都知道为什么在rails生产网站的connectionDidFinishLoading之前没有调用didReceiveData?

1 个答案:

答案 0 :(得分:0)

我终于明白了。在config / environments / production.rb中注释掉以下内容解决了问题:

# config.action_dispatch.x_sendfile_header = "X-Sendfile"

通过使用以下内容替换config / environments / production.rb中的上述行也解决了这个问题:

config.action_dispatch.x_sendfile_header = "X-Accel-Redirect"

根据这个post,看起来对于send_file的Rails 3有一些变化。这个post建议使用X-Accel-Redirect方法,但帖子声称请求是从rails应用程序发送的,而不是从nginx发送的。这个post声称nginx需要X-Accel-Redirect方法。