现在,我正在查看管理界面中的编辑产品视图,但每次我尝试查找选项类型时,我的api都返回404。这似乎是因为Select2命中了以下url:/ecommerce/api/option_types?... (故意不包括实际的查询),尽管我的actual应该是/store/api/,因为我的routes.rb文件中有以下内容:mount Spree::Core::Engine, at: '/store'
我确认当我在routes.rb文件中将代码临时切换为mount Spree::Core::Engine, at: '/ecommerce'时,我的选项类型正确地显示在select2选择框中。
我唯一的猜测是,在这个项目的早期,我已经在/ecommerce (即mount Spree::Core::Engine, at: '/ecommerce')安装了spree引擎。但后来我更改了代码以将其挂载到store,之后重启了终端中的rails服务器,并确保硬刷新浏览器(以防出现缓存问题),但select2表单仍然命中了错误的路径(/ecommerce/api/option_types?...)。
我试着挖掘源代码,但它变得非常密集,很快就有了select2和它的js以及所有的东西,哈哈。
有没有关于如何修复这个问题的猜测?
发布于 2019-01-29 01:09:51
一开始,我无法重现这个问题。但后来我想通了。这个问题是由rails缓存资产引起的……您只需删除tmp/cache/assets/目录的内容即可解决此问题。
为什么会发生这个问题?JS API调用后端使用的路由定义并存储在JS object Spree.routes中,您可以在浏览器javascript控制台查看其内容。
这些URL前缀来自core/app/assets/javascripts/spree.js.erb中定义的Spree.pathFor
Spree.mountedAt = function() {
return "<%= Rails.application.routes.url_helpers.spree_path(trailing_slash: true) %>";
};当您更改狂欢挂载路径时,Rails.application.routes.url_helpers.spree_path会发生变化,而这个JS文件一旦生成,就不会发生变化,因为它的MD5校验和仍然是相同的。因此,将使用tmp/cache/assets/目录中的缓存版本。
https://stackoverflow.com/questions/54365754
复制相似问题