Rails 6部署至Railway时资产编译失败求助
Rails 6部署Railway时
icons.css资产管道错误解决方案 1. 确认文件位置与资产归属
- 检查
icons.css是否在app/assets/stylesheets/目录下:如果是自定义文件,确保它在asset pipeline的默认扫描路径里;如果是第三方依赖(如通过yarn安装的图标库),这类文件应该由webpacker处理,而非asset pipeline。 - 若文件在
app/javascript/stylesheets/或node_modules中,不要用asset pipeline的stylesheet_link_tag引用,改用webpacker的stylesheet_pack_tag。
2. 修正视图中的引用方式
打开app/views/layouts/application.html.erb第33行,确认引用语法:
- 属于asset pipeline的文件:使用
<%= stylesheet_link_tag 'icons', media: 'all', 'data-turbolinks-track': 'reload' %>,不要手动添加/assets/前缀,Rails会自动处理生产环境的指纹路径。 - 属于webpack打包的文件:如果是通过webpack导入的,使用
<%= stylesheet_pack_tag 'application' %>(前提是你在app/javascript/packs/application.js中导入了icons.css,比如import '../stylesheets/icons.css')。
3. 配置资产预编译规则
编辑config/initializers/assets.rb,确保icons.css被加入预编译列表:
Rails.application.config.assets.precompile += %w( icons.css )
本地执行生产环境预编译验证:
RAILS_ENV=production bundle exec rake assets:precompile
检查public/assets/目录下是否生成了带指纹的icons-xxxxxx.css文件,若没有,说明文件未被正确纳入资产管道。
4. 检查Railway部署配置
- 确认Railway的
RAILS_ENV环境变量设为production。 - 检查部署脚本是否包含资产预编译步骤:在Railway的build命令中添加
bundle exec rake assets:precompile,比如在railway.toml中配置:
[build] command = "bundle install && bundle exec rake assets:precompile"
- 若之前部署有缓存,可在部署前执行清理:
bundle exec rake assets:clobber
5. 排查webpacker与asset pipeline冲突
Rails 6同时支持asset pipeline和webpacker,避免混用两种方式引用同一文件:
- 如果已经用webpacker打包了
icons.css,就不要再用asset pipeline的标签引用它。 - 检查
config/webpacker.yml,确保production环境下webpack的编译输出路径正确,且Railway能读取到打包后的文件。
内容的提问来源于stack exchange,提问作者Fernando Nahat Jardim
相关产品推荐
相关产品推荐

