Rails报错:资产管道中不存在application.js资产
解决Rails中"The asset 'application.js' is not present in the asset pipeline"报错
问题核心
你用--javascript=webpack创建的Rails项目,默认会用Webpacker管理JavaScript资产,但布局文件里仍使用了传统Asset Pipeline的javascript_include_tag,两者不匹配导致文件找不到;另外也可能是Webpacker未正确安装或入口文件缺失。
具体解决步骤
替换布局中的资产标签
Webpacker的JS入口文件在app/javascript/packs/application.js,需要把布局里的标签换成Webpacker对应指令:<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_pack_tag "application", "data-turbo-track": "reload", defer: true %>如果你通过npm安装Bulma并想用Webpacker管理样式,也可以把样式标签换成
stylesheet_pack_tag "application"。补全Webpacker安装配置
之前你遇到过webpack文件夹缺失的问题,重新执行安装命令补全依赖和配置文件:bundle exec rails webpacker:install执行后检查
app/javascript/packs/application.js是否存在,这是Webpacker编译JS的核心入口文件。启动Webpack开发服务器
开发环境下需要同时运行Rails服务器和Webpack编译服务:- 单独启动Webpack dev server:
./bin/webpack-dev-server - 或者启动Rails时自动附带Webpack服务(部分Rails版本支持):
rails s -b webpack-dev-server
生产环境部署前需要预编译资产:
bundle exec rails webpacker:compile- 单独启动Webpack dev server:
换回传统Asset Pipeline(可选)
如果不想用Webpacker,想转回Asset Pipeline管理JS:- 确保
app/assets/javascripts/application.js存在,且文件内包含Sprockets指令(比如//= require_tree .) - 在
config/initializers/assets.rb中添加:Rails.application.config.assets.precompile += %w( application.js ) - 清理旧缓存:
rails assets:clean rails tmp:clear
- 确保
内容的提问来源于stack exchange,提问作者Nguyen Cuc
相关产品推荐
相关产品推荐

