我的AppServiceProvider.php
文件中有以下代码:
<?php
namespace App\Providers;
use App\Models\Setting;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
if (Schema::hasTable('settings')) {
foreach (Setting::all() as $setting) {
Config::set('settings.'.$setting->key, $setting->value);
}
}
}
}
它在本地运行得很好,但当我通过DeployHQ部署时,它终止了该进程,并显示以下错误:
SQLSTATE[HY000][2002]没有这样的文件或目录(SQL:SELECT*FROM INFORMATION_SCHEMA_TABLES其中TABLE_SCHEMA=Giga和TABLE_NAME= 设置和TABLE_TYPE=‘基表’)
这在某种程度上是有道理的,因为构建服务器上不存在数据库,所以判断无法运行,因为没有要判断的内容.有没有一种不同的方法,在 bootstrap 时用数据库中的值对settings
配置进行加密,而不会影响php artisan package:discover
的运行?
我知道这可能会被问到,但是.env
文件等都设置正确了.这个问题与构建服务器没有数据库有关,但文件通过管道传输到的服务器有数据库.
编辑: 为了给出更多的上下文,也许可以给出一些建议,我只是在Service类的代码中真正使用了这个配置值:
public function __construct()
{
$this->domain = config('api.domain');
$this->apiVersion = config('api.version');
$this->bearerToken = config('settings.bearer_token');
$this->clientId = config('api.client_id');
$this->clientSecret = config('api.client_secret');
}
所有在线内容都建议将这些值放到配置中,然而,如果只在这里调用它,那么直接从数据库检索它是否可以?