memori

ちょっとだけ技術的なことをメモ〜

BEAR.Skeleton で作ったアプリケーションでファイル書き込みをしたくない (WIP)

追記: 実行時に書かれるファイルは所謂キャッシュなので、生成後にデプロイすれば良いとのこと


  • 基本的にタイトルの通り
  • 所謂 PaaS とかの環境とかで動かすには、アプリを実行するときにファイルシステムに書き込みをして欲しくない
  • あんまり時間がないので、息抜きにマイペースに調べてつつ回避を試してみよう
  • 毎度ブログ記事にする余裕はないので、とりあえずこの記事を編集しながら作業進めてみよう

現状の見解: 依存パッケージがそれぞれカジュアルにファイルを書く傾向にあるので排除するのは難しい

調べてみる

  • 基本的には BEAR.Package がベースになっていて、そこの Bootstrap で AppMeta が作られるので、AppMeta でまずは mkdir が呼ばれてしまう。
  • ということは、bootstrap/bootstrap.php$app を作るときに独自の AppMeta を使って作るとまずはスキップできそう
  • 試しに
<?php
class MyAppMeta extends \BEAR\AppMeta\AppMeta
{
    public function __construct($name, $context = 'app')
    {
        $appModule = $name . '\Module\AppModule';
        if (!class_exists($appModule)) {
            throw new \BEAR\AppMeta\Exception\AppNameException($name);
        }
        $this->name = $name;
        $this->appDir = dirname(dirname(dirname((new \ReflectionClass($appModule))->getFileName())));
    }
}

route:{
    $appMeta = new MyAppMeta(__NAMESPACE__, $context);
    $app = (new Bootstrap)->newApp($appMeta, $context);
    /* @var $app AbstractApp \BEAR\Sunday\Extension\Application\AbstractApp */
    $request = $app->router->match($GLOBALS, $_SERVER);
}
  • としてみたが、今度は Ray.Compiler がファイルを書けなくてコケるようだ
  • 思いの外根が深い雰囲気出てきたな...