表題の通りですが、
laravelで別サーバのcsvファイルを取得して/storage/app/に保存するバッチを作り、herokuスケジューラで実行するシステムを作りました。ローカル環境では問題なく動作しますがherokuスケジューラで実行するとUndefined constant "League\Flysystem\Adapter\FTP_BINARY"というエラーが出ます。herokuのタイムゾーンは日本になっています。自分でも調べましたが手がかりがないため質問させていただきます。内容はエラーの対処法に加えてherokuへのcsvファイルの保存についてです。わかる方、どうぞご教授よろしくお願い致します。スキルは高くないためできれば簡単なご説明をいただけると大変ありがたいです。
■質問内容
1.エラーの対処方、手がかり
2.herokuにcsvファイルを保存しても保持できるか?こちら↓のサイトを参考にしまして気になっています。
https://blog.mah-lab.com/2013/05/16/heroku-commons-16/
以下がログです。
Starting process with command `php artisan command:getcsv` by user scheduler@addons.heroku.com Starting process with command `php artisan command:getcsv` State changed from starting to up In FilesystemManager.php line 180 Undefined constant "League\Flysystem\Adapter\FTP_BINARY" Process exited with status 1 State changed from up to complete
FTPの接続情報をfilesystem.phpに設定し、Storage(FileStorageFlysystemパッケージ)を利用して別サーバーにあるcsvファイルを取得して/storage/app/に保存しています。詳細なソースは以下です。
Laravel Framework 7.30.4
■filesystem.php
こちら以外はデフォルトのままです
'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), ], 'ftp' => [ 'driver' => 'xxx', 'host' => 'xxxxx', 'username' => 'xxxxx', 'password' => 'xxxxx', ], ],
■DailyDownloadCsvSchedule.php
ここのコマンドをherokuスケジューラで呼び出しています
namespace App\Console\Commands; use Illuminate\Console\Command; use Lang; use Illuminate\Http\Request; use \App\Lib\DailyDownloadCsvService; class DailyDownloadCsvSchedule extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:getcsv'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return int */ public function handle() { //return 0; //print_r('GetCsv'); $common = new DailyDownloadCsvService(); $common->DailyDownloadCsv(); } }
■
namespace App\Lib; use Illuminate\Support\Facades\Storage; class DailyDownloadCsvService { /** * @param $msg */ public function DailyDownloadCsv ( ) { $disk = Storage::disk('ftp'); $store_dir = '/mail'; $store_filename = 'test.csv'; $storefile = sprintf('%s/%s',$store_dir ,$store_filename ); $contents_cstm = $disk->get($storefile); Storage::disk('local')->put('rewrite.csv', $contents_cstm); $contents = $disk->get('test2.csv'); Storage::disk('local')->put('rewrite2.csv', $contents); } }
回答1件
あなたの回答
tips
プレビュー