2016-07-26 25 views
0

我建了一個twilio-powered rails app是具有發送帶有參數的SMS(於從,體)的方法。該應用程序在本地使用ngrok在開發和生產模式下工作正常。Rails的Twilio應用程序發送在運行的Heroku文本時掛起,但(在所有環境和當地)在Heroku在軌控制檯進行

Heroku是一個不同的故事。一旦到達構建文本消息的部分,它就不會越過它,並且日誌不會顯示任何問題。這就像它停滯不前,twilio放棄等待15秒後的迴應。這裏是正在發送具有SMS類:

需要「twilio-紅寶石」

class SmsActions 
    def self.compose_message(to, from, body) 

    account_sid = Rails.application.secrets.twilio_account_sid 
    auth_token = Rails.application.secrets.twilio_auth_token 

    @client = Twilio::REST::Client.new(account_sid, auth_token) 

    message = @client.account.messages.create({ 
     from: from, 
     to: to, 
     body: body, 
     statusCallback: "http://fptracker.herokuapp.com/twilio/callback" 
    }) 
end 

我曾用「放」語句來登錄並確認它看到account_sid和AUTH_TOKEN。同樣的事情發現,它不會在消息塊下面運行任何東西。

奇怪的是,我可以運行hoerku運行軌道,輸入發送文本(硬編碼account_sid和令牌)和它的工作原理完全相同的代碼。

所以我不認爲它缺少憑據,我不認爲這是中間件(因爲它的工作原理手動Heroku的),它不是生產包膜,因爲它在生產本地工作。我一直在爲此工作30多個小時,而且完全陷入了困境。

--edit 我發現我沒有所需的代碼在我的通知控制器的頂部,這是在本教程中,如:

require 'twilio-ruby' 

class NotificationsController < ApplicationController 
    include Webhookable 

    after_filter :set_header 

    skip_before_action :verify_authenticity_token 

但添加後,它仍然無法正常工作。

我注意到的第二件事是,當我把代碼直接在控制器創建SMS,它工作在Heroku。我把這個方法放在同一個notifications_controller文件的不同類中,然後調用它。

但是,當它被調用的預期方式的路徑是這樣的:

  1. 路線命中通知#解析
  2. 解析正則表達式的消息開始「測試」
  3. 解析方法,然後調用模型方法留言.auto_reply
  4. Message.auto_reply從祕密中獲取我的twilio號碼並有幾個puts語句,然後調用SmsActions.compose_message
  5. 撰寫郵件是列出的類bove並創建短信。

所以compose_message是在本地環境中工作但不在heroku上的類。它確實受到了打擊,因爲日誌顯示了我放在那裏的put語句,但它凍結/停止了在heroku中創建的Twilio消息。控制器和該方法之間發生了某些事情。

+0

這很奇怪,你是否在[Twilio日誌](https://www.twilio.com/console/sms/logs)中看到任何東西? – philnash

+0

好的,所以我注意到的一件事是我沒有在這個控制器的頂部調用這個所需的twilio代碼。 –

+0

哪些需要Twilio代碼?這是否有所作爲? – philnash

回答

0

解決。它和Twilio完全沒有關係,但是當我嘗試創建文本消息時,我在「from」變量中傳遞了一個零值。該值從我的ENV變量

from = Rails.application.secrets.twilio_number 

當從控制器內叫出來,它從環境變量訪問變量成功,卻是零隨時隨地控制器之外調用時。我不知道爲什麼。所以下面的這個塊會被這個零值卡住,但在heroku日誌中沒有任何值顯示我。也許Twilio的網站上有一個方法可以看到,但是我懷疑它是否無法將其與數字相關聯?雖然它通過了account_sid。

message = @client.account.messages.create({ 
    from: from, # this was passing in a nil value 
    to: to, 
    body: body, 
    statusCallback: "http://fptracker.herokuapp.com/twilio/callback" 
}) 
相關問題