0

我有一個rails 3.0.3網站,在開發模式下,通過調用didReceiveData,然後connectionDidFinishLoading響應HTTP GET,並將照片數據從網站發送到iPhone和正確顯示。但是,當我在Amazon Web Services上以生產模式運行rails 3.0.3網站時,在didReceiveData之前調用connectionDidFinishLoading。我使用carrierwave處理開發和生產rails站點的照片。connectionDidFinishLoading之前調用didReceiveData與rails生產發送照片

有沒有人有任何想法可能會導致connectionDidFinishLoading在didReceiveData之前調用?

我試着檢查以下內容:

1)我確定NSURLConnectionDelegate被調用這個類的接口。

2)didReceiveResponse不會被調用之前connectionDidFinishLoading和的StatusCode = 200

3)在我使用由send_file發送的照片數據的Rails應用程序,並在生產中發送的文件的路徑,是一張實際的照片。

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 
       ) 

任何人都有的,爲什麼didReceiveData是沒有得到connectionDidFinishLoading的導軌生產網站之前叫什麼想法?

+0

它應該工作..但我們不能測試你的代碼。如果你可以提供didReceiveData的代碼。 – 2012-02-28 03:21:27

+0

請注意,didReceiveData被rails的開發版本調用,但不會被生產版本的rails調用。 – 2012-02-28 13:23:36

+0

你可以給生產網站的地址,以便我可以測試...它可能是你的網站的問題,而不是在生產模式下的iPhone編碼 – 2012-02-28 14:21:50

回答

0

我終於明白了。註釋掉配置/環境以下/ production.rb固定的問題:

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

問題也固定通過用替換配置/環境/ production.rb上述行以下操作:

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

根據這post它看起來像Rails 3對send_file的一些變化。此post建議使用X-Accel-Redirect方法,但是該帖子聲稱該請求是從rails應用程序發送的,而不是從nginx發送的。 post聲稱nginx需要X-Accel-Redirect方法。