"Laravel 10 - kunci API tidak dikenali dalam fail .env"
P粉198814372
2023-08-30 11:26:11
<p>Saya menggunakan <code>Laravel Framework 10.15.0</code>. </p>
<p>Saya cuba memuatkan kunci API saya dengan cara berikut: </p>
<pre class="brush:php;toolbar:false;">$apiKeyOpenAI = env('OPENAI_API_KEY');
$client = OpenAI::client($apiKeyOpenAI);</pre>
<p>Dalam fail <code>.env</code> saya, kunci API ditakrifkan dengan jelas: </p>
<p><kod>OPENAI_API_KEY=xx-xxxxxxxxxxxxxxxxxxxxxxxx</code></p>
<p>Walau bagaimanapun, apabila melaksanakan aplikasi saya pada pelayan, saya mendapat bahawa <kod>$apiKeyOpenAI</code> </p>
<p>Walau bagaimanapun, saya mempunyai OPENAI_API_KEY dalam fail <kod>.env</code>Saya telah menyemaknya! </p>
<p>Saya cuba mengosongkan cache <code>php artisan config:clear </code> tetapi saya masih mendapat ralat: </p>
<pre class="brush:php;toolbar:false;">TypeError
OpenAI::client(): Argumen #1 ($apiKey) mestilah daripada jenis rentetan, batal diberikan, dipanggil dalam /var/www/demo-website/app/Console/Commands/AdminCommand.php pada baris 151
di vendor/openai-php/client/src/OpenAI.php:13
9▕{
10▕ /**11▕ * Mencipta Klien AI Terbuka baharu dengan token API yang diberikan.
12▕*/
➜ 13▕ klien fungsi statik awam(rentetan $apiKey, rentetan $organisasi = null): Pelanggan
14▕{
15▕ kembalikan diri::kilang()
16▕ ->denganApiKey($apiKey)
17▕ ->denganOrganisasi($organisasi)
1 apl/Console/Commands/AdminCommand.php:151
OpenAI::client()
2 app/Console/Commands/AdminCommand.php:39
AppConsoleCommandsAdminCommand::generateContentUsingOpenAI()</pre>
<p>Ada cadangan apa yang saya lakukan salah? </p>
<p>Terima kasih atas balasan anda! </p>
<p><strong>Kemas kini</strong></p>
<p>Selepas digunakan ke pelayan, saya perlu menjalankan skrip ini untuk menjadikannya berfungsi: </p>
<pre class="brush:php;toolbar:false;">Route::get('/clear', function() {
Artisan::call('cache:clear');
Artisan::call('config:clear');
kembalikan "Cache, Config dikosongkan";
})->perisian tengah(['auth', 'admin']);</pre>
<p>Pada penggunaan, skrip ini juga akan dijalankan secara automatik: </p>
<pre class="brush:php;toolbar:false;">#!/bin/sh
set -e
bergema "Mengedarkan aplikasi ..."
# Masukkan mod penyelenggaraan
(php artisan turun) ||
# Kemas kini pangkalan kod
git fetch origin deploy
git reset --hard origin/deploy
# Pasang kebergantungan berdasarkan fail kunci
komposer install --no-interaction --prefer-dist --optimize-autoloader
#Migrasi pangkalan data
php artisan migrate --force
# Nota: Jika anda menggunakan pekerja baris gilir, ini adalah tempat untuk memulakan semula mereka.
#...
# Kosongkan cache
# php artisan optimize
php artisan config:cache
php artisan route: clear
php artisan route:cache
php artisan view:clear
php artisan view:cache
php artisan auth:clear-reset
php artisan cache:clear
php artisan config: clear
#Generate sitemap
# php artisan sitemap:generate
# Muat semula PHP untuk mengemas kini opcache
echo "". sudo -S service php8.1-fpm reload
# Keluar dari mod penyelenggaraan
php artisan up
bergema "Aplikasi digunakan!"</pre></p>
Dalam
config/*.php
文件之外不要使用env()
。如果你曾经运行过php artisan config:cache
(通常应该在生产环境中进行),那么env()
将停止在这些文件之外工作(对于大多数情况来说;env
键仍然可以加载,但这对于大多数Laravel设置来说并不典型)。这就是为什么你需要运行php artisan config:clear
才能使env()
不返回null
sebab.Tambah kunci pada mana-mana fail lain dalam direktori
config/app.php
(或config/
:Kemudian, apabila anda ingin menggunakan kunci ini, gunakan fungsi
config()
helper:Perhatian:
app
是文件名,open_ai_api_key
是数组索引。如果你使用了不同的文件,比如config/services.php
,那么应该使用config('services.open_ai_api_key')
Sila rujuk dokumentasi untuk butiran:
https://laravel.com/docs/10.x/configuration#configuration-caching