2017-02-02 7 views
0

У меня есть платная учетная запись с Twilio. В моем приложении rails у меня очень простая настройка для ответа на входящий телефонный звонок в рельсах с twilio. В routes.rb, у меня естьРельсы не маршрутизируются на мое действие контроллера Twilio

post 'communications/answer_phone' => 'communications#answer_phone' 

В communications_controller.rb, у меня есть

class CommunicationsController < ApplicationController 
    skip_before_action :verify_authenticity_token 
    def answer_phone 
    logger.debug '******** answered' 
    response = Twilio::TwiML::Response.new do |r| 
     r.Say "Yay! You’re on Rails!", voice: "alice" 
    end 
    render :xml => response.to_xml 
    end 
end 

Если я пытаюсь вызвать мой номер Twilio, ngrok говорит 500 Internal Server Error, так что я знаю, что запрос на получение ngrok. Если я посмотрю на файл журнала рельсов, я вижу

Started POST "/communications/answer_phone" for xxx.xxx.xxx.xxx at 2017-02-02 21:47:06 +1100 

поэтому запрос обращается к моей заявке. Я не получаю ******** answered в своем файле журнала от logger.debug. Запрос никогда не доходит до моего действия answer_phone. Любые идеи, что может быть неправильным?

UPDATE

Я сделал rake routes, и это дает мне

communications_receive_sms POST /communications/answer_phone(.:format) communications#answer_phone 

Это выглядит правильно. Если я сознательно пишется маршрут неправильно в routes.rb, я получаю эту ошибку

ActionController::RoutingError (No route matches [POST] "/communications/answer_phone"): 

Так что я знаю, что запрос получает в моем приложении рельсы, и я знаю, что это найти маршрут. Что может привести к тому, что рельсы найдут подходящий маршрут, но не вызовет связанное действие.

ответ

1

Я нашел ошибку в рельсах 4.18. В Интернете есть пример, который делает это возможным. Смотрите по ссылке ниже

https://www.twilio.com/blog/2016/05/calling-rails-5-getting-started-with-twilio-on-rails.html

Пример для рельсов 5, так что ошибка должна быть исправлена. Следующая строка кода вызывает ошибку.

r.Say "Yay! You’re on Rails!", voice: "alice" 

Апостроф в "Yay! You’re on Rails!" не является стандартом один на моей клавиатуре компьютера. Обычный апостроф - это шестнадцатеричный символ 0x27, тот, в котором вы находитесь, является шестнадцатеричным символом 0x92. Это вызывает ошибку синтаксического анализа в рельсах. Даже если я направляюсь к другому действию в этом контроллере, ошибка все же происходит.

Я надеюсь, что это поможет кому-то в будущем.

EDIT

Если изменить апостроф, вы должны перезагрузить сервер рельсы, чтобы исправить проблему