繁体   English   中英

在运行时在heroku中发送文本时,Rails Twilio App会挂起,但在heroku(以及所有环境中的本地)的Rail console中可以运行

[英]Rails Twilio App hangs when sending text in heroku on run, but works in rail console on heroku (and locally in all environments)

我构建了一个twilio驱动的rails应用程序 ,该应用程序具有一种发送带有参数(到,来自,正文)的SMS的方法。 该应用程序可以在开发和生产模式下使用ngrok在本地正常运行。

Heroku是一个不同的故事。 一旦到达生成文本消息的部分,它就不会越过文本,并且日志也不会显示任何问题。 就像它停了下来,twilio放弃了等待15秒后等待响应。 这是发送短信的类:

需要“ twilio-ruby”

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

我已经使用“ puts”语句进行记录并确认它可以看到account_sid和auth_token。 发现它在message块下没有任何运行的发现也是一样。

奇怪的是,我可以运行hoerku run rails,输入发送文本的完全相同的代码(硬编码account_sid和token),并且可以正常工作。

因此,我不认为它缺少凭据,也不认为它是中间件(因为它可以在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. 路由点击通知#parse
  2. 解析正则表达式以获取以“ test”开头的消息
  3. 然后解析方法调用模型方法Message.auto_reply
  4. Message.auto_reply从秘密中获取我的twilio编号,并具有一些puts语句,然后调用SmsActions.compose_message
  5. 撰写消息是上面列出的类,并创建文本消息。

因此compose_message是可在本地环境中使用的类,但不适用于heroku。 它确实受到了打击,因为日志显示了我放入的puts语句,但是它冻结/停止了在heroku中创建Twilio消息的操作。 控制器和该方法之间发生了某些情况。

解决了。 它与Twilio完全无关,但是我在尝试创建文本消息时在“ from”变量中传递了nil值。 这个值来自我的ENV变量

from = Rails.application.secrets.twilio_number

从控制器内部调用时,它成功访问了环境变量中的变量, 但是从控制器外部的任何位置调用时它为nil 我不知道为什么。 因此,下面的该块将被卡在该值为nil的边缘中,但是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"
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM