1

我使用apn_on_rails在Rails 3.0.9應用程序中發送推送通知。像這樣:`device.id`在生產中返回NULL,但在開發中正常工作

gem 'apn_on_rails', :git => 'https://github.com/natescherer/apn_on_rails.git', :branch => 'rails3' 

我有註冊設備令牌下面的方法:

# POST /iphones/register_device_token.json 
def register_device_token 
    @iphone = Iphone.find_or_create_by_unique_identifier(params[:unique_identifier]) 

    device = APN::Device.find_or_create_by_token(params[:device_token]) 

    logger.fatal "APN Device ID: #{device.id}" 
    logger.fatal "APN Device token: #{device.token}" 

    @iphone.apn_device_id = device.id 

    respond_to do |format| 
    if @iphone.save 
     format.json { render :json => @iphone, :status => :created, :location => @iphone } 
    else 
     format.json { render :json => @iphone.errors, :status => :unprocessable_entity } 
    end 
    end 

end 

它可以在很大的發展,使用sqlite3,但在生產,使用mysqldevice.id回報NULL。兩個數據庫都被遷移到最新版本。我不知道爲什麼會發生這種情況,任何關於如何進行的建議都非常感謝。

+1

從SQLite3(不是SQL)和其他任何dbms切換出現問題真的很常見。 MySQL有一個免費版本。下載並使用它代替SQLite。同時,查看發送到服務器的SQL,直接運行它(使用MySQL Workbench或命令行工具)。如果仍然無法弄清楚,請編輯您的問題並粘貼SQL DDL,樣本INSERT語句,然後查詢欄試圖使用。 –

回答

0

問題在於deviceToken被<>包圍。 ActiveRecord只是忽略了這些字符並創建了沒有它們的記錄,所以第一次註冊它的設備工作。當ActiveRecord應該找到設備令牌時出現問題。 device.id變成nil,但device.token仍然正確。

無論如何,當我們改變客戶端不發送<>一切工作完美。

相關問題