ダウンタイムがゼロになるように、envoy を使用してアプリケーションをデプロイしたいと考えています。いくつかの調査の結果、このスクリプトはまさに私が望んでいたとおりに機能することがわかりました。 https://github.com/papertank/envoy-deploy
基本的に、バックエンドではすべてがうまく機能しました。プロジェクトのクローンを作成し、すべてのコマンドを実行して、最新のプロジェクトを指すことができます。その後、vue コンポーネント用に npm の新しいタスクを追加しました。これがタスクです
@task('deployment_assets')
echo 'Running npm'
cd {{ $release }}
sudo npm ci --production
sudo npm audit fix --only=prod
sudo npm run prod
@endtask
これを行うには、laravel mix 関連の依存関係を devDependencies から依存関係に移動します。
"dependencies": {
"laravel-mix": "^6.0.31",
"resolve-url-loader": "^4.0.0",
"sass": "~1.32.0",
"sass-loader": "^11.0.1",
"vue-loader": "^15.9.5",
"webpack": "^5.23.0"
},
タスクを実行すると、最初の問題が発生します。webpack.mix.js が変数を読み取れないようです。process.env.APP_URL を呼び出すと、未定義が返されました。これが構文です。
if (process.env.APP_URL.match(/https?:\/\/.*\/.+/)) {
mix.setResourceRoot(process.env.APP_URL);
}
これは私の.envのようです
APP_DEBUG=true
APP_URL=http://homestead.test
laravel mixの問題を確認した後、使用することをお勧めします
require('dotenv').config({ path: '~/www/app/.env'});
環境変数をロードします。
だから私は webpack.mix.js を次のように変更します
const mix = require('laravel-mix');
require('dotenv').config({ path: '~/code/app/.env'});
これで、process.env を介してすべての変数を取得できるようになりました。タスクが完了しました。その後、プロジェクトに移動すると、2 番目の問題が発生しました。
app.js が process.env を取得できず、console.log(process.env) のときに {} が返されました
if (process.env.APP_URL.match(/https?:\/\/.*\/.+/)) {
//
}
.env がそこにあることを確認できます。それ以外の場合は、npm run prod の実行時にエラーがスローされます app.js で env 変数を取得できない理由がわかりません
これは、運用環境でアセットをコンパイルするためのベスト プラクティスではないかもしれません。しかし、私の vue コンポーネントは .env ファイルから同じ環境変数を共有していたので、これは私の場合に必要です。
これを解決する方法を知っている人はいますか?