我构建了一个Laravel应用程序并将其上传到数字海洋。所有这些都没关系,除了我追踪但无法解决的一些问题。
问题是:
我创建了一个设置模型,其中包含一个包含键,值和其他字段的表。 我为我的应用程序的自定义设置创建了此模型。 另外,我创建了一个控制器来更新值并将其保存到缓存中(注意:缓存驱动程序是数组,因为我使用的是zizaco / entrust插件)。
public function update(Request $request, Factory $cache)
{
if (!Auth::user()->hasRole(['admin','owner'])){
return redirect(config('app.admin_prefix') . '/index');
}
for($i = 0; $i < count($request->title); $i++){
$input['value'] = $request->value[$i];
Settings::whereId($request->id[$i])->first()->update($input);
}
// When the settings have been updated, clear the cache for the key 'settings' // Back to AppServiceProvider.php
if (Cache::has('settings')) {
$cache->forget('settings');
}
$this->generateSettings();
return redirect('/admin/settings')->with([
'message' => __('Admin/admin.updated_successfully'),
'alert-type' => 'success'
]);
}
public function generateSettings() {
if (Cache::has('settings')) {
$setting = Cache::get('settings');
} else {
$setting = Settings::pluck('value', 'key')->all();
if ($setting)
{
Cache::forever('settings', $setting);
}
}
config()->set('settings', $setting);
}
我在appServiceProvider.php中编写代码来加载缓存并将其分配给配置:
public function boot()
{
.
.
.
if (Cache::has('settings')) {
$setting = Cache::get('settings');
} else {
$setting = Settings::pluck('value', 'key')->toArray();
if ($setting) {
Cache::forever('settings', $setting);
}
}
config()->set('settings', $setting);
.
.
.
}
现在,当我正在测试或刷新页面时,我的错误会出现。我看到了这条消息:
SQLSTATE[HY000] [2002] No such file or directory (SQL: select `value`, `key` from `settings`)
我应该等待一段时间直到页面工作,还是应该重新启动Nginx。
答案 0 :(得分:0)
由于评论中的字符用完了,我会将其作为答案发布。
对我而言,有问题的部分似乎是在这一行
if (Cache::has('settings')) {
$cache->forget('settings');
}
如果您可以重写代码,那么缓存不会被删除但是被覆盖的问题应该会消失。所以我的建议是这样做:
public function update(Request $request, Factory $cache)
{
if (!Auth::user()->hasRole(['admin','owner'])){
return redirect(config('app.admin_prefix') . '/index');
}
for($i = 0; $i < count($request->title); $i++){
$input['value'] = $request->value[$i];
Settings::whereId($request->id[$i])->first()->update($input);
}
$this->generateSettings();
return redirect('/admin/settings')->with([
'message' => __('Admin/admin.updated_successfully'),
'alert-type' => 'success'
]);
}
public function generateSettings()
{
$setting = Settings::pluck('value', 'key')->all();
if ($setting){
Cache::forever('settings', $setting);
}
config()->set('settings', $setting);
}