ruby-on-rails - Twilio 请求路由问题 - 没有路由匹配

标签 ruby-on-rails ruby-on-rails-4 twilio

我尝试过关注 this设置基本 Twilio 应用程序的教程,但我似乎在路由方面遇到问题。

当我向它发送消息时,我收到此错误:

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

这是我的路线文件

Rails.application.routes.draw do
  resource :messages do
    collection do
      post 'reply'
    end
  end
end

这是我的 Controller :

class MessagesController < ApplicationController
 skip_before_filter :verify_authenticity_token

  def reply
    message_body = params["Body"]
    from_number = params["From"]
    boot_twilio
    sms = @client.messages.create(
      from: Rails.application.secrets.twilio_number,
      to: from_number,
      body: "Hello there, thanks for texting me. Your number is #{from_number}."
    )

  end

  private

  def boot_twilio
    account_sid = Rails.application.secrets.twilio_sid
    auth_token = Rails.application.secrets.twilio_token
    @client = Twilio::REST::Client.new account_sid, auth_token
  end
end

更新16年9月18日19:12

我意识到我应该更清楚地说明我在这里想要做什么。这个想法是,您向 twilio 号码发送短信,它会将该请求发送到托管应用程序,该应用程序通过 twilio 将响应发送回原始发件人。

错误日志

Started POST "/" for 54.161.31.172 at 2016-09-18 19:18:00 +0100

ActionController::RoutingError (No route matches [POST] "/"):
  actionpack (4.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  web-console (2.3.0) lib/web_console/middleware.rb:20:in `block in call'
  web-console (2.3.0) lib/web_console/middleware.rb:18:in `catch'
  web-console (2.3.0) lib/web_console/middleware.rb:18:in `call'
  actionpack (4.2.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.2.6) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.2.6) lib/rails/rack/logger.rb:20:in `block in call'
  activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.2.6) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.2.6) lib/rails/rack/logger.rb:20:in `call'

  actionpack (4.2.6) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
  rack (1.6.4) lib/rack/runtime.rb:18:in `call'
  activesupport (4.2.6) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
  rack (1.6.4) lib/rack/lock.rb:17:in `call'
  actionpack (4.2.6) lib/action_dispatch/middleware/static.rb:120:in `call'
  rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
  railties (4.2.6) lib/rails/engine.rb:518:in `call'
  railties (4.2.6) lib/rails/application.rb:165:in `call'
  rack (1.6.4) lib/rack/lock.rb:17:in `call'
  rack (1.6.4) lib/rack/content_length.rb:15:in `call'
  rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
  /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
  /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
  /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'


  Rendered /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates
/rescues/_trace.html.erb (2.1ms)
  Rendered /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates
/routes/_route.html.erb (1.9ms)
  Rendered /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates
/routes/_table.html.erb (2.6ms)
  Rendered /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates
/rescues/_request_and_response.html.erb (1.3ms)
  Rendered /Users/tomgamon/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates
/rescues/routing_error.html.erb within rescues/layout (124.1ms)

Rake 路由输出

Prefix Verb   URI Pattern               Controller#Action
          root GET    /                         messages#index
reply_messages POST   /messages/reply(.:format) messages#reply
      messages POST   /messages(.:format)       messages#create
  new_messages GET    /messages/new(.:format)   messages#new
 edit_messages GET    /messages/edit(.:format)  messages#edit
               GET    /messages(.:format)       messages#show
               PATCH  /messages(.:format)       messages#update
               PUT    /messages(.:format)       messages#update
               DELETE /messages(.:format)       messages#destroy

最佳答案

您没有设置根路由(主页)。

您可以通过在routes.rb中添加以下内容来做到这一点:

root 'controller#action' // root to the action of the controller you want to set as the index page a.k.a the homepage.

根据您的情况,它将是:

root 'messages#index'

现在在您的消息 Controller 中添加一个名为index的空方法,如下所示:

def index 
end

现在创建一个文件views/messages/index.html.erb

问题现在应该已经解决了。

编辑

root 'messages#index' 替换为 post '/' => "messages#index",如:“root

关于ruby-on-rails - Twilio 请求路由问题 - 没有路由匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39560693/

相关文章:

ruby-on-rails - Rails 迁移后无法将数据添加到新列

javascript - Angular JS 不更新嵌套对象的 View

ruby-on-rails - 使用外部 URL 作为附件时,Paperclip 提示内容类型错误

java - 如何使用 Twilio Java SDK 发送批量短信?

javascript - Twilio 客户端 Python 在 IOS 浏览器中不工作

jquery - 您会在 Rails 应用程序中使用什么来自动完成?

ruby-on-rails - 充当Voable获取Upvotes错误

ruby-on-rails - Devise 注册后立即在 Controller 中执行某些操作

ruby-on-rails - Rails 中的连接表有什么用?

sms - 使短信验证码易于复制