【问题标题】:Post request from external website to Rails App is not routed through从外部网站到 Rails 应用程序的发布请求未通过路由
【发布时间】:2017-03-16 02:27:19
【问题描述】:

我正在尝试将数据从外部网站发送到 Rails 应用程序,但未正确路由发布请求。

Rails 应用程序有路线

  post '/submit_text/' => 'activities#submitText', as: :submitText

对应控制器动作的代码是

    before_filter :submitText
    protect_from_forgery :except => :submitText
    def submitText    
      puts "in submitText"
      puts params[:text]
      puts "end of submitText "
    end
    

我正在尝试像这样将数据从外部网站发送到 Rails 应用程序

<form action="https://todo-list-study.herokuapp.com/submit_text/" method= "post">

    
        <textarea name="response[text]" rows="25" cols="75" id="answer_text">
    
        </textarea>
    
        <input type="submit" name="Submit" value="test" onclick="recordAnswer()">    
    
</form>    

当我从外部网站提交数据时,Rails 应用程序会收到它,但它不会将它传递给指定的控制器操作。这是根据 Heroku 日志文件发生的情况:

heroku[router]: at=info method=POST path="/submit_text/" host=todo-list-study.herokuapp.com request_id=fee72511-ad1e-41c3-ae4c-d4b3395e6afd fwd="24.7.71.184" dyno=web.1 connect=1ms service=19ms status=500 bytes=1754 protocol=https

不幸的是,这就是发生的一切。鉴于方法开头的 put 语句没有被执行,我得出结论它没有被调用。即使 Rails 应用程序和外部网站都在 HTTPS 协议上运行,也会发生这种情况。

我能做些什么来解决这个问题?

【问题讨论】:

  • 查看 config/environments/development.rb 中的配置
  • 我应该在那里寻找什么?

标签: ruby-on-rails post heroku routes


【解决方案1】:

路由器正在为该调用寻找一个动作,否则它会以404 而不是500 进行响应,这表明存在内部错误。

假设您没有尝试将带有内容的响应发送回客户端,请尝试添加对渲染的调用,以便您的控制器发送回响应而不是尝试查找要渲染的视图模板,这就是我猜是这个问题。

例如,尝试将您的代码更新为:

def submitText    
  puts "in submitText"
  puts params[:text]
  puts "end of submitText "

  render nothing: true
end

【讨论】:

  • 谢谢!我已采纳您的建议并尝试再次提交表单,但不幸的是,日志仍以“heroku[router]: at=info method=POST path="/submit_text/" host=todo-list-study.herokuapp.com 结尾request_id=88c59a3a-e119-422f-b946-54c4499389a6 fwd="24.7.71.184" dyno=web.1 connect=2ms service=19ms status=200 bytes=873 protocol=https"。
  • 这次你得到了一个状态 200,所以至少它是成功提交的。您在日志中该行之前没有看到“in submitText”吗?
  • 哦,我没注意到。我想这意味着进步。但是不,由于某种原因,我在日志文件中没有看到“in submitText”。内部错误可能来自哪里?
  • 内部错误可能是因为您缺少渲染子句,它会尝试渲染我猜不存在的 submitText 模板。您是否通过 Heroku 看到任何应用级日志?
  • 有可能,但是为什么“in submitText”仍然没有出现在日志中?最近的应用级日志是“INFO WEBrick::HTTPServer#start: pid=4 port=11002”,它出现在“heroku[web.1]: State changed from starting to up”之前。会不会是从那时起出现了错误,这就是应用程序此时不再工作的原因?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2011-08-05
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多