【Rails 7】Multiple files with the same output path cannot be linked ("application.css")エラーを解決する
Rails7でbin/dev
を実行するとActionView::Template::Error (Multiple files with the same output path cannot be linked ("application.css")
(Sprockets::DoubleLinkError
)のエラーが発生
実行環境
- Ruby:3.3.0
- Rails:7.1.3.2
- Node.js:20.12.2
- yarn:1.22.22
- importmap-rails:2.0.1
- tailwindcss-rails:2.3.0
- cssbundling-rails:1.4.0
- jsbundling-rails:1.3.0
エラー発生までの流れ
importmap-rails + tailwindcss-railsの構成でアプリを新規作成した。
$ rails new --css tailwind
↓
importmap-rails + tailwindcss-railsからjsbundling-rails + cssbundling-railsに変更した。
(参考:【Rails7】TailwindCSS + daisyUIを導入する)
# Gemfile gem 'cssbundling-rails' gem 'jsbundling-rails'
$ bin/rails javascript:install:esbuild $ bin/rails css:install:tailwind
↓
やっぱりimportmap-rails + tailwindcss-railsに戻すことにしたため、上記の変更を取り消した。
↓
bin/dev
でサーバー起動すると以下のエラーが出た。
ActionView::Template::Error (Multiple files with the same output path cannot be linked ("application.css") In "/xxx/sample-app/app/assets/config/manifest.js" these files were linked: - /xxx/sample-app/app/assets/stylesheets/application.css - /xxx/sample-app/app/assets/builds/application.css ):
解決法
→app/assets/builds/application.css
を削除する。
app/assets/builds/tailwind.css
とapp/assets/builds/application.css
が両方存在してることがエラーの原因だった。
app/assets/builds/tailwind.css
はtailwindcss-rails
が出力するファイルで、app/assets/builds/application.css
はcssbundling-rails
が出力するファイル。
rails/tailwindcss-rails - Output file: app/assets/builds/tailwind.css
When you run rails tailwindcss:build, the input file will be used to generate the output in app/assets/builds/tailwind.css. That's the output CSS that you'll include in your app (the installer automatically configures this, alongside the Inter font as well).
Whenever the bundler detects changes to any of the stylesheet files in your project, it'll bundle app/assets/stylesheets/application.[bundler].css into app/assets/builds/application.css.
# package.json { 省略 "scripts": { "build": "esbuild app/javascript/*.* --bundle --sourcemap --format=esm --outdir=app/assets/builds --public-path=/assets", "build:css": "tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --minify" } }
app/assets/builds/*
は.gitignore
で管理対象外に指定されているため、cssbundling-rails
をインストールした時のコミットを取り消してもapp/assets/builds/application.css
が残ってしまっていた。