【问题标题】:HTTP PUT/DELETE not working for Apache2, Passenger, Rails 4HTTP PUT/DELETE 不适用于 Apache2、Passenger、Rails 4
【发布时间】:2014-01-08 17:11:09
【问题描述】:

我一辈子都无法解决这个问题。我到处搜索了我能想到的每个关键字,但找不到一个简单的答案。

如何为 Apache、Phusion Passenger、Rails 4 生产服务器堆栈启用 HTTP PUT 和 DELETE?

我非常困惑为什么这很难开始工作。窥视,让我的 AJAX PUT 和 DELETE 请求在后端被接受的技巧是什么?当我只是在本地机器上运行 Webrick 进行开发时,这很有效,但我们的生产站点似乎不接受 PUT 和 DELETE 请求。

我什至无法判断这是 Apache 问题、Passenger 问题还是什么。有人必须使用完整的 REST 功能完成此设置。或者这只是不适合这项工作的技术? (我不是服务器专家)。在这种情况下,你会推荐什么?

注意:应用程序的其余部分运行良好,只有 PUT/DELETE AJAX 请求被浏览器中止。

【问题讨论】:

  • 您可以使用Passenger Standalone来检查它是否是Apache,它使用Nginx来处理它的请求。不要运行rails server,只需运行passenger start。检查是否有效。
  • 我使用sudo service apache2 start 启动我的服务器,我假设在某些时候调用passenger start,但我不知道。
  • 它没有。 passenger start 启动Passenger Standalone,而不是Apache 的Passenger。 Passenger Standalone 和Passenger for Apache 是两个完全不同的东西。见modrails.com/documentation/Users%20guide.html
  • 我遇到了同样的问题。它适用于passenger start。从其他地方收集的信息来看,由于安全原因,Apache 似乎不允许 PUT。我认为只有 AJAX 请求受到影响的原因是 Rails 通过发送带有额外参数的 POST 来伪造正常的 PUT 请求。
  • 天啊!在修复我的代码以改用 POST 后,结果发现使用了错误的 URL,访问了 Rails 之外的路径。

标签: ruby-on-rails apache http passenger


【解决方案1】:

我遇到了同样的问题,结果证明是我们的 rails 应用程序的问题。

指针是我的 /var/log/apache2/error.log 中的一行:

ActionController::RoutingError (No route matches [GET] "/javascripts/application.js")

解决办法是放

config.assets.compile = true

config/environments/production.rb 并在服务器启动前预编译资产

rake assets:precompile

我在answer 中找到了这个解决方案。

您可能还想查看他链接的blog post

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多