-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tmpDirが存在するときのNOTICEを抑制する対応を実施 #208
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## 2.x #208 +/- ##
===========================================
Coverage 100.00% 100.00%
Complexity 168 168
===========================================
Files 30 30
Lines 470 470
===========================================
Hits 470 470 ☔ View full report in Codecov by Sentry. |
これは「書き込み権限がないtmpDirを作成していると」という事でしょうか? |
コメントありがとうございます! RUN chmod -R 777 var/log var/tmp 原因が特定できないので、とりあえずログが出ている箇所で抑制しようと考えた次第です。 |
書き込み権限のあるディレクトリが存在すれば |
考慮すべき点を列挙すると
if ($tmpDir && !is_dir($tmpDir) && !@mkdir($this->secretsDir, 0777, true) && !is_dir($tmpDir)) {
throw new \NotWritable($tmpDir);
} |
以下のようなスクリプトを作成して確認すると $tmpDir = __DIR__ . '/tmp';
if (! is_writable($tmpDir)) {
mkdir($tmpDir);
}
var_dump(is_writable(__DIR__ . '/tmp')); |
doctrine/cacheの実装 https://github.com/doctrine/cache/blob/1.13.x/lib/Doctrine/Common/Cache/FileCache.php#L97 is_writableが通らなければエラーにしています。 |
tmpDirが必要なライブラリでは、A)書き込みができるディレクトリがなければ例外 B)書き込みディレクトリがなければ作成、のいずれかがほとんどで書き込みできないディレクトリが用意されている状態へのエラーはあっても、リカバリーまではない事が多いようです。 Ray.Aopのこの部分だけで対処しても、他のライブラリでは問題になるかもしれず不安が残ります。どうでしょうか。 |
色々なパターンご提示いただきありがとうございます。 確かにアプリケーション側では例外もしくは、Ray.AopのパターンのようにNOTICEを出して気づかせる。。という役割に留めたほうが良さそうですね。 |
そもそも、NOTICEが出ているクラスでis_writableに渡される$tmpDirが、var/tmpディレクトリじゃない可能性があるってことですよね。。? その辺りの確認をしていないのでダメですね。。 |
@momospnr しかしBEAR.Sundayの場合ならvar/tmp は通常通り指し示されてるだろうと考えるのは自然ですね。 |
再度確認したら、この箇所は https://github.com/ray-di/Ray.Aop/blob/2.x/sl-src/Cache.php#L63 なのでそもそもディレクトリが無いわけですから |
tmpDirのバリデーションをより細かく行うPRを作成しました。 |
ローカル(Mac)でデバッグしていたところ、$this->tmpDirの値が下記になっていました。 "/var/folders/md/zt16vyds29n0n9d6dw_3cmyr0000gq/T/24" アプリケーションルートのvar/tmpディレクトリにファイルキャッシュが作られる前に #209 ありがとうございます! |
このキャッシュは対象ファイルの日付を見ていてつまりキャッシュのメンテナンスの必要が無い=ファイルを更新すれば値が変わるのであえて(他と違い)システムのtmpディレクトリの場所にしています。 |
解説ありがとうございます! |
再現方法
PHPアプリケーションをビルドする際に
Dockerfileなどで事前にtmpDirを作成していると
ヘルスチェックなどの初回アクセスでコンパイラが動いたときに下記のエラーログが発生します。
エラーログ
対応内容
is_dirでtmpDirの存在確認を行い、なければmkdirで作成するようにしました。
is_writableで、falseのときにchmodするように修正しました。