daemontools経由等で、デーモンのプロセスを立ち上げるときに、プロセス内でbundle exec hoge
などのコマンドを実行すると、
'/' is not writable. Bundler will use '/tmp/bundrer/home/unknown/' as your home directory temporarily.
のようなwarningメッセージがでます。
これは、HOME
が設定されていない環境におけるfallbackのための修正によって発生します。
1.14.5
以降のbundlerを使うと発生します。
https://github.com/bundler/bundler/blob/master/CHANGELOG.md#1145-2017-02-22
原因
下記のようなコードで再現できます(OSはMacです)。
% cat test.rb p ENV['HOME'] p Gem.user_home % HOME=/ bundle exec ruby test.rb `/` is not writable. Bundler will use `/var/folders/kw/_3kqzwx93nvbbl0h2wk6nkz8bj8f_z/T/bundler/home/hoge' as your home directory temporarily. "/" "/"
エラーがでるところはここです。
bundler/bundler.rb at 3203fdd2ad861af2aedfa233b754a02bfc1c4741 · bundler/bundler · GitHub
まずbundle
コマンドでbundler自体の設定を行うのですが、bundlerのconfigurationオプションの設定が書かれているファイルから設定を読み込みます。
bundler/settings.rb at 3203fdd2ad861af2aedfa233b754a02bfc1c4741 · bundler/bundler · GitHub
bundler/settings.rb at 3203fdd2ad861af2aedfa233b754a02bfc1c4741 · bundler/bundler · GitHub
このconfigurationオプションの設定とは、
ここにある設定群になります。
この内容はbundle config
で設定した内容が反映されています。
実際の内容はこんな感じです。
% cat .bundle/config --- BUNDLE_GEM__TEST: "rspec" BUNDLE_GEM__MIT: "false" BUNDLE_GEM__COC: "false" BUNDLE_BUILD__THERUBYRACER: "--with-v8-dir=/usr/local/opt/v8@3.15" BUNDLE_BUILD__LIBV8: "--with-system-v8"
bundlerのconfigurationオプションの設定があるファイルはglobalとlocalの2つがあります。
localは実行しているカレントディレクトリ/.bundle/config
にファイルが設置されています。
globalの場合が今回の問題で、設置されているパスは、環境変数BUNDLE_CONFIG
があれば、 $BUNDLE_CONFIG/.bundle/config
になり、なれば$HOME/.bundle/config
に設置されています。
ただし、HOME
もBUNDLE_CONFIG
が設定されていない場合や、HOME
に書込み権限がなければ実際に書込みが発生する際にエラーになっていました。(bundle install
やbundle update
、bundle config
を実行した時)
.bundle
配下はbundlerの設定やgemのchecksumなどのキャッシュファイルが格納するために必須です。
そこで、HOME
もBUNDLE_CONFIG
も設定されていない場合や、.bundle配下が書き込めない場合においてtempfileにディレクトリを作成してそこに格納するようにします。
tempfileに格納する際に、warningメッセージがでます。
このメッセージが出た場合
.bundle/config
で設定される内容はほとんどがビルドオプションになります。
bundle install
やbundle update
を行う場合にはbundlerのンパイルオプション等に影響があるので、要確認です。
ただし、bundle exec
経由でコマンドを実行する場合においては影響がないことがほとんどです。
(特にデーモン化したプロセスでbundler経由でコマンドを呼び出すと、HOMEが/
になっているのでこのwarningがでると思います。)
自分で設定した内容を確認して、問題なければwarningをスルーでも大丈夫です。
デーモンでもどうしてもこのwarningを止めたい
bundler binstub
を使ってプロジェクトにbundleされた実行可能ファイルを生成してその実行ファイル経由でコマンドを実行してください。