copy laravel app root instead of symlinking
PHP's __DIR__ follows symlinks, so an artisan symlink at /var/lib/tide/app/artisan resolved back to the read only store path. That made every Laravel file path ultimately resolve into the store, including storage/logs/laravel.log and bootstrap/cache, which Laravel must be able to write. The redirected symlinks for those two subtrees never even got consulted because resolution happened upstream of them. Switch tide-prepare to copy the package contents into appRoot, then mount /var/lib/tide/state over storage/ and bootstrap/cache/ via symlinks out of a writable parent. Now __DIR__ resolves to the writable copy and Laravel can boot.
This commit is contained in:
parent
9bdabd50e7
commit
4ca6d492e6
1 changed files with 15 additions and 20 deletions
|
|
@ -139,29 +139,24 @@ in
|
|||
};
|
||||
script = ''
|
||||
set -eu
|
||||
|
||||
# Copy the immutable store package into a writable app root.
|
||||
# Symlinking would defeat Laravel's __DIR__ based path
|
||||
# resolution: PHP's __DIR__ follows symlinks back to the
|
||||
# read only store, breaking storage/ and bootstrap/cache/
|
||||
# writes even when those subtrees are themselves symlinked
|
||||
# into a writable state dir.
|
||||
rm -rf ${appRoot}
|
||||
mkdir -p ${appRoot}
|
||||
for entry in ${cfg.backendPackage}/share/php/tide-backend/*; do
|
||||
name="$(basename "$entry")"
|
||||
case "$name" in
|
||||
storage|bootstrap)
|
||||
;;
|
||||
*)
|
||||
ln -s "$entry" "${appRoot}/$name"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# bootstrap dir: symlink everything from the store
|
||||
# except cache/ which must be writable.
|
||||
mkdir -p ${appRoot}/bootstrap
|
||||
for entry in ${cfg.backendPackage}/share/php/tide-backend/bootstrap/*; do
|
||||
name="$(basename "$entry")"
|
||||
if [ "$name" != "cache" ]; then
|
||||
ln -sf "$entry" "${appRoot}/bootstrap/$name"
|
||||
fi
|
||||
done
|
||||
ln -sfn ${stateRoot}/bootstrap-cache ${appRoot}/bootstrap/cache
|
||||
cp -rL ${cfg.backendPackage}/share/php/tide-backend/. ${appRoot}/
|
||||
chmod -R u+w ${appRoot}
|
||||
|
||||
# Redirect the two mutable subtrees to /var/lib/tide/state
|
||||
# so they survive activations and don't accumulate inside
|
||||
# the disposable app root copy.
|
||||
rm -rf ${appRoot}/storage ${appRoot}/bootstrap/cache
|
||||
ln -sfn ${stateRoot}/storage ${appRoot}/storage
|
||||
ln -sfn ${stateRoot}/bootstrap-cache ${appRoot}/bootstrap/cache
|
||||
|
||||
chown -R ${cfg.user}:${cfg.group} ${appRoot} ${stateRoot}
|
||||
'';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue