Beanstalkでは「.ebextensions」ディレクトリ配下に予め準備しておいたファイルをもとに、起動時に自動でコマンドを打ってくれます。
set-timezone.config
# /.ebextensions/set-timezone.config
commands:
set_time_zone:
command: ln -f -s /usr/share/zoneinfo/Japan /etc/localtime
こんな感じ。
その勢いでLaravelのシンボリックリンク設定を自動化したかったんですが、そこで少し詰まったんで記事として書いておきます。
うまく行かなかったケース
最初はこんな感じで記載していました。
starage-link.config
# /.ebextensions/starage-link.config
# シンボリックリンクを作成
container_commands:
storage_link:
command: "php artisan storage:link"
いざデプロイしてみるとエラーは特に発生しなかったんですが、うまくリンクができていませんでした。
なんでや!と思ってサーバーの中見てたんですが、存在しない絶対パスをリンク先として参照しており、それで上手くいっていなかった模様…
色々調べましたが「php artisan storage:link」でシンボリックリンクを作る方法はBeanstalkでは適していないようです。
うまく行ったケース
Linuxのlnコマンドを使うと解決しました。
set-timezone.config
# /.ebextensions/starage-link.config
# シンボリックリンクを作成
container_commands:
storage_link:
command: "ln -s ../storage/app/public public/storage"
-s オプションをつけることでシンボリックリンクを作ることができます。
これで上手くいきました!
BeanstalkはPaaSとして結構便利だと思ってるんですが、時よりこんな感じで詰まることがあります…
いい加減ECS辺りにお引越しさせようかと悩んでいるところです。