我在离开几年后再次使用Rails(上次使用Rails 4)。我有多个刺激控制器,它们引用一个名为metric_defaults.js
的文件。该文件只包含一组平面定义,例如:
Chart.defaults.elements.line.tension = 0.25;
Chart.defaults.elements.line.borderWidth = 5;
在rails 7开发环境中,这个导入可以很好地处理来自每个刺激控制器的import '../metric_defaults.js'
,但是在生产环境中,我得到了:
Failed to load resource: the server responded with a status of 404 (Not Found) (metric_defaults.js)
我花了一天的时间试图找到它,但所有的努力都失败了。一些花絮:
- 我使用的是标准的Rails 7配置(importmaps、sprocketball)
- 我已经确认生产服务器正在正确地预编译资产。这包括metric_defaults. js,但它的名称中有一个指纹(metric_defaults-9032 be 9 e.... js),而404似乎试图访问未指纹的文件?
- 生产服务器是Heroku示例
- metric_defaults. js文件的路径为app/javascript/metric_defaults. js
- 刺激控制器位于app/javascript/controllers/
- 如前所述,在开发中运行良好
- 我不知所措
有什么想法吗
1条答案
按热度按时间4xy9mtcn1#
设置:
请参见生成的导入Map:
很简单
但是:
我很确定这是我第一次关闭
config.assets.quiet
:在开发中,
/assets
被路由到 * sprocket *,它可以处理消化和未消化的资产,并且工作正常:在生产环境中,Web服务器代替它完成工作,它只有预编译的资产,
/assets/plugin
得到404。修复#1
停止使用相对导入。
修复#2
创建一个与相对导入匹配的导入Map:
如果你想走这条路,我会借用@cesoid的helper方法,它会让你开始: