"Laravel 10 - API密钥在.env文件中未被识别"
P粉198814372
2023-08-30 11:26:11
<p>我正在使用 <code>Laravel Framework 10.15.0</code>。</p>
<p>我尝试以以下方式加载我的API密钥:</p>
<pre class="brush:php;toolbar:false;">$apiKeyOpenAI = env('OPENAI_API_KEY');
$client = OpenAI::client($apiKeyOpenAI);</pre>
<p>在我的 <code>.env</code> 文件中,API密钥已经明确定义:</p>
<p><code>OPENAI_API_KEY=xx-xxxxxxxxxxxxxxxxxxxxxxx</code></p>
<p>然而,在服务器上执行我的应用程序时,我得到的 <code>$apiKeyOpenAI</code> 是null。</p>
<p>但是,我的 <code>.env</code> 文件中确实有 OPENAI_API_KEY。我已经检查过了!</p>
<p>我尝试清除缓存 <code>php artisan config:clear </code>,但仍然出现错误:</p>
<pre class="brush:php;toolbar:false;">TypeError
OpenAI::client(): Argument #1 ($apiKey) must be of type string, null given, called in /var/www/demo-website/app/Console/Commands/AdminCommand.php on line 151
at vendor/openai-php/client/src/OpenAI.php:13
9▕ {
10▕ /**11▕ * 使用给定的 API 令牌创建新的 Open AI 客户端。
12▕*/
➜ 13▕ public static function client(string $apiKey, string $organization = null): Client
14▕ {
15▕ return self::factory()
16▕ ->withApiKey($apiKey)
17▕ ->withOrganization($organization)
1 app/Console/Commands/AdminCommand.php:151
OpenAI::client()
2 app/Console/Commands/AdminCommand.php:39
App\Console\Commands\AdminCommand::generateContentUsingOpenAI()</pre>
<p>有什么建议我做错了吗?</p>
<p>感谢您的回复!</p>
<p><strong>更新</strong></p>
<p>在部署到服务器后,我需要运行此脚本以使其正常工作:</p>
<pre class="brush:php;toolbar:false;">Route::get('/clear', function() {
Artisan::call('cache:clear');
Artisan::call('config:clear');
return "Cache, Config is cleared";
})->middleware(['auth', 'admin']);</pre>
<p>在部署时,此脚本也会自动运行:</p>
<pre class="brush:php;toolbar:false;">#!/bin/sh
set -e
echo "Deploying application ..."
# Enter maintenance mode
(php artisan down) || true
# Update codebase
git fetch origin deploy
git reset --hard origin/deploy
# Install dependencies based on lock file
composer install --no-interaction --prefer-dist --optimize-autoloader
# Migrate database
php artisan migrate --force
# Note: If you're using queue workers, this is the place to restart them.
# ...
# Clear 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-resets
php artisan cache:clear
php artisan config:clear
# Generate sitemap
# php artisan sitemap:generate
# Reload PHP to update opcache
echo "" | sudo -S service php8.1-fpm reload
# Exit maintenance mode
php artisan up
echo "Application deployed!"</pre></p>
在
config/*.php
文件之外不要使用env()
。如果你曾经运行过php artisan config:cache
(通常应该在生产环境中进行),那么env()
将停止在这些文件之外工作(对于大多数情况来说;env
键仍然可以加载,但这对于大多数Laravel设置来说并不典型)。这就是为什么你需要运行php artisan config:clear
才能使env()
不返回null
的原因。在
config/app.php
(或config/
目录下的任何其他文件)中添加一个键:然后,当你想要使用这个键时,使用
config()
辅助函数:注意:
app
是文件名,open_ai_api_key
是数组索引。如果你使用了不同的文件,比如config/services.php
,那么应该使用config('services.open_ai_api_key')
详细信息请参阅文档:
https://laravel.com/docs/10.x/configuration#configuration-caching