ruby-on-rails - 开发中的 Rails POST(补丁)在生产中变为 GET
问题描述
与Rails 链接中的情况相同,该链接在开发中发布 GET 在生产中,但该问题没有结论,所以我也在尝试:
- 导轨 5.2.3
- 红宝石 2.6
- 在 Docker 容器中运行
- Live 应用程序在 Ubuntu 16.04.6 上
在我看来,我有以下几点:
<%= link_to '✓'.html_safe, item_path(item), method: :patch, :class=>"item__buy-btn" %>
它生成以下 HTML:
<a class="item__buy-btn" rel="nofollow" data-method="patch" href="/items/32">✓</a>
这是在我的项目控制器中(我没有项目#show):
def update
item = Item.find(params[:id])
item.update(bought: true)
list = List.find(item.grocery_item_id)
receipt = Receipt.find(list.receipts.last.id)
receipt.close
item.update(grocery_item_id: receipt.id, grocery_item_type: receipt.class.name)
item.save
redirect_to request.referrer || root_url
end
这是我的物品相关路线:
items GET /items(.:format) items#index
POST /items(.:format) items#create
new_item GET /items/new(.:format) items#new
edit_item GET /items/:id/edit(.:format) items#edit
item GET /items/:id(.:format) items#show
PATCH /items/:id(.:format) items#update
PUT /items/:id(.:format) items#update
DELETE /items/:id(.:format) items#destroy
日志说补丁:
web_1 | Started PATCH "/items/33" for 172.21.0.1 at 2019- 05-05 19:29:31 +0000
web_1 | Cannot render console from 172.21.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
web_1 | Processing by ItemsController#update as HTML
web_1 | Parameters: {"authenticity_token"=>"KmPf0fEDEs6Y2gUmC6Su9fdeVOg51AwCUUWyQBq14Gz0Fs6IRJ5cmmQdUETMbE+IMRTTGcfQPQ86x0rNzDSRHg==", "id"=>"33"}
然后在生产中:
I, [2019-05-05T18:27:22.439552 #1] INFO -- : [93c90971-1378-4e39-b6fb-8329dd46922e] Started GET "/" for 10.255.0.2 at 2019-05-05 18:27:22 +0000
I, [2019-05-05T18:27:22.440379 #1] INFO -- : [93c90971-1378-4e39-b6fb-8329dd46922e] Processing by HomeController#index as HTML
I, [2019-05-05T18:27:22.441694 #1] INFO -- : [93c90971-1378-4e39-b6fb-8329dd46922e] Rendering home/index.html.erb within layouts/application
I, [2019-05-05T18:27:22.443279 #1] INFO -- : [93c90971-1378-4e39-b6fb-8329dd46922e] Rendered home/index.html.erb within layouts/application (1.4ms)
I, [2019-05-05T18:27:22.444679 #1] INFO -- : [93c90971-1378-4e39-b6fb-8329dd46922e] Completed 200 OK in 4ms (Views: 3.0ms)
I, [2019-05-05T18:49:37.971732 #1] INFO -- : [5f452d24-80c5-44dc-bd8a-cb2be0aa5f14] Started GET "/items/7" for 10.255.0.2 at 2019-05-05 18:49:37 +0000
F, [2019-05-05T18:49:37.973154 #1] FATAL -- : [5f452d24-80c5-44dc-bd8a-cb2be0aa5f14]
F, [2019-05-05T18:49:37.973209 #1] FATAL -- : [5f452d24-80c5-44dc-bd8a-cb2be0aa5f14] AbstractController::ActionNotFound (The action 'show' could not be found for ItemsController):
F, [2019-05-05T18:49:37.973237 #1] FATAL -- : [5f452d24-80c5-44dc-bd8a-cb2be0aa5f14]
F, [2019-05-05T18:49:37.973274 #1] FATAL -- : [5f452d24-80c5-44dc-bd8a-cb2be0aa5f14] actionpack (5.2.3) lib/abstract_controller/base.rb:129:in `process'
什么可能导致这种行为?我在这篇文章中是否缺少任何相关信息?
编辑:
根据 ser tadmans 的回答,这显然是关于 javascript 的。由于其中一个文件中的“#”注释,它在预编译时失败。
解决方案
这通常是因为 Rails UJS JavaScript 库加载失败并且它注入的数据属性被忽略了。
检查是否加载了 UJS 库。如果您使用的是 Sprockets,请确保存在rails-ujs
“注释”行application.js
。
如果您在production
模式下运行,则需要确保您的资产已正确编译。这可以rake assets:precompile
在 Rails 3 到 5.2 的生产部署位置完成。
推荐阅读
- javascript - 当它们进入视口时延迟加载地图
- realm - 在域 Keycloak 服务器上创建领域/客户端不会立即对从属 Keycloak 节点可见
- google-sheets - 将多列组合成一个范围
- java - 关于这段 Java 代码的问题,为什么要这样写
- azure - 如何使用 Azure 数据工厂执行带有日期或键列的增量加载
- database - 具有多个关系和继承的实体的灵活数据库结构
- azure-devops - 删除任务 VSTS
- tensorflow - 训练对象检测分类器 如何使用 TensorFlow 赚钱
- laravel - 手动设置 url.intended 和错误的浏览器历史记录
- java - 从范围返回模式字符串的java方法