2017-08-18 7 views
0

/上の私はトラヴィスで発生する、断続的なファイルアップロードのエラーを持っている:ドッカー、TravisCI、PHPファイルのアップロードと断続的な権限エラーTMP

Warning: file_put_contents(/tmp/customerDownload_1502892540/image.png): failed to open stream: Permission denied (500 Internal Server Error) 

これはPHP 7.1ドッカーコンテナ上で動作しているのSymfony 2.8プロジェクトです。 Behatのシナリオでは、管理者によるファイルアップロードのテストや、ユーザーによるダウンロードが行われます。ファイルを作成する私の方法は以下の通りです:かなりの量の約20%が失敗します。しかし、決して地元でも生産でもない。 /tmpにアクセス許可を設定して、www-dataというユーザー:グループを含めるように試みましたが、効果はありません。最初に作成したディレクトリ内のファイルにコンテンツを置くことができない理由が混乱しています。

誰にこのようなことが起こっているのか、それがどうして防止されるのか、誰にも示唆できますか?

+0

は、コンテナ内のtmpフォルダですか?もしそうなら、ホスティングマシン上の何かにマップされていますか? –

+0

@omu_negruそれはコンテナの中にあり、どのボリュームや何でもホストにマップされていません –

+1

コンテナ内の 'df -h'をチェックしますか?または、ドッカーコンテナを実行している間に、コンテナ内の '/ tmp'にホストフォルダをマウントして助けてくれるかどうかを確認してください。 –

答えて

0

私はこれが何らかの競合状態であり、ファイルの命名の問題であると信じています。私はテストのために同じファイルを使用しています。おそらく、テストはファイルを上書きしようとしていて、実行できないほど速く実行されています。メソッドを以下のように更新し、これまで12回のテストで失敗していませんでした。

/** 
* @param string $fileContents 
* @param Media $file 
* @return File 
*/ 
private function createLocalTemporaryFile(string $fileContents, Media $file): File 
{ 
    $tmpDir = '/tmp/' . uniqid('customerDownload_', true); 
    mkdir($tmpDir); 
    $tmpFilePath = $tmpDir . '/' . $file->getName(); 
    file_put_contents($tmpFilePath, base64_decode($fileContents)); 
    $tmpFile = new File(realpath($tmpFilePath)); 

    return $tmpFile; 
} 
関連する問題