Docker for Windowsのコンテナ内でRailsを動かしていると、 Errno::EEXIST in Sessions#new
というエラーが出るようになった。バージョンはRails5.1、sprockets3。具体的にはこんなエラー。
File exists @ dir_s_mkdir - /app/tmp/cache/assets/sprockets/v3.0/ta
何かよくわからないが、ファイルが作れないというエラー。そのパスを見てみても同じファイルはない。…と思いきや、Windowsの場合、大文字小文字を区別していないので大文字のファイルが見つかった。
ということでWindows環境特有の問題らしい。調べてみるとすでにissueが立っていた。
で、上記のissueにとりあえず動かせる方法を書いてくれてる人がいた。デフォルトだとアプリケーションのtmpフォルダ内にファイルが作られてしまうが、それを変えてしまう方法。
config/initializers/assets.rb
に下記を追記。
Rails.application.config.assets.configure do |env|
env.cache = Sprockets::Cache::FileStore.new(
ENV.fetch("SPROCKETS_CACHE", "#{env.root}/tmp/cache/assets"),
Rails.application.config.assets.cache_limit,
env.logger
)
end
あとは.envでもdocker-compose.ymlでもいいので、キャッシュを保存したい、Windowsのフォルダをマウントしていないコンテナ内のフォルダをSPROCKETS_CACHEという環境変数で指定するだけ。コンテナ作成後の初回だけすごく時間がかかるので、docker-comose.yml内にこんな感じでボリュームを作っておくと早い。
web:
environment:
- SPROCKETS_CACHE=/cache
volumes:
- .:/app
- cache:/cache
volumes:
cache:
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント