我正在一个需要将一些数据从excel转换为数据库的项目中。这在laravel的本地主机上工作正常,但是当进入heroku时,它会给我500个内部服务器错误。
我在heroku中搜索了可能的内容,然后我发现heroku的数据库有2个值从请求中插入。所以这意味着代码循环两次,但随后发生错误。
我试图在代码中找到错误4个小时,但我没有发现发生了什么......
以下是代码:
public function insertFromExcel(){
$excel = new \Maatwebsite\Excel\Facades\Excel();
$data = $excel::load('../../../excel_files/relacao_5.xls', function ($reader) {
})->get();
foreach ($data as $row) {
//-----------------------------------------Verifica Setor-------------------------------------
if(isset($row['nome_setor'])){
$setor_id = DB::table('setor')->where('nome', '=', $row['nome_setor'])->pluck('id');
if ($setor_id == null) {
$setor_id = DB::table('setor')->insertGetId([
'nome' => $row['nome_setor']
]);
}
}
else{
$setor_id = null;
}
//-----------------------------------------Verifica Funcionario--------------------------------
$funcionario_id = DB::table('funcionario')->where('matricula', '=', $row['codfun'])->pluck('id');
if ($funcionario_id === null) {
$funcionario_id = DB::table('funcionario')->insertGetId([
'nome' => $row['nome_func'],
'matricula' => $row['codfun'],
'pis_pasep' => $row['pis_pasep'],
'data_admisao' => $row['admissao'],
'setor_id' => $setor_id
]);
}
else{
$funcionario_pis_pasep = DB::table('funcionario')->where('matricula', '=', $row['codfun'])->pluck('pis_pasep');
if($funcionario_pis_pasep == null || $funcionario_pis_pasep == 0){
DB::table('funcionario')
->where('id', $funcionario_id)
->update([
'pis_pasep' => $row['pis_pasep']
]);
}
$funcionario_setor = DB::table('funcionario')->where('matricula', '=', $row['codfun'])->pluck('setor_id');
if($funcionario_setor == null){
DB::table('funcionario')
->where('id', $funcionario_id)
->update([
'setor_id' => $setor_id
]);
}
}
//-----------------------------------------Verifica Cargos--------------------------------
if (strpos($row['descrnivcarg'], "GERENTE") !== false) {
$gerente = DB::table('gerente')
->join('funcionario', 'gerente.funcionario_id', '=', 'funcionario.id')
->where('funcionario.id', '=', $funcionario_id)
->pluck('gerente.id');
if ($gerente == null) {
$user_id = DB::table('usuario')->insertGetId(['senha' => '12345', 'nivel' => 3]);
DB::table('gerente')->insert([
'funcionario_id' => $funcionario_id,
'usuario_id' => $user_id
]);
}
}
if (strpos($row['descrnivcarg'], "COORDENADOR") !== false) {
$coordenador = DB::table('coordenador')
->join('funcionario', 'coordenador.funcionario_id', '=', 'funcionario.id')
->where('funcionario.id', '=', $funcionario_id)
->pluck('coordenador.id');
if ($coordenador == null) {
$user_id = DB::table('usuario')->insertGetId(['senha' => '12345']);
DB::table('coordenador')->insert([
'funcionario_id' => $funcionario_id,
'usuario_id' => $user_id
]);
}
}
if (strpos($row['descrnivcarg'], "SUPERVISOR") !== false) {
$supervisor = DB::table('supervisor')
->join('funcionario', 'supervisor.funcionario_id', '=', 'funcionario.id')
->where('funcionario.id', '=', $funcionario_id)
->pluck('supervisor.id');
if ($supervisor == null) {
$user_id = DB::table('usuario')->insertGetId(['senha' => '12345', 'nivel' => 2]);
DB::table('supervisor')->insert([
'funcionario_id' => $funcionario_id,
'usuario_id' => $user_id
]);
}
}
if (strpos($row['descrnivcarg'], "ESTAGIARIO") !== false) {
$estagiario = DB::table('estagiario')
->join('funcionario', 'estagiario.funcionario_id', '=', 'funcionario.id')
->where('funcionario.id', '=', $funcionario_id)
->pluck('estagiario.id');
if ($estagiario == null) {
$user_id = DB::table('usuario')->insertGetId(['senha' => '12345', 'nivel' => 1]);
DB::table('estagiario')->insert([
'funcionario_id' => $funcionario_id,
'usuario_id' => $user_id
]);
}
} else {
$cargo_id = DB::table('cargo')->where('nome', '=', $row['descrnivcarg'])->pluck('id');
if ($cargo_id == null) {
$cargo_id = DB::table('cargo')->insertGetId(['nome' => $row['descrnivcarg']]);
}
$operario = DB::table('operario')
->join('funcionario', 'operario.funcionario_id', '=', 'funcionario.id')
->where('operario.id', '=', $funcionario_id)
->pluck('operario.id');
if ($operario == null) {
DB::table('operario')->insert([
'funcionario_id' => $funcionario_id,
'cargo_id' => $cargo_id,
]);
}
}
}
$funcionario_db[] = DB::table('funcionario')->select('matricula', 'nome', 'data_admisao', 'pis_pasep')->get();
return $funcionario_db;
}
答案 0 :(得分:3)
答案 1 :(得分:3)
对于heroku中的密钥问题,请在config / app.php中添加以下代码:
'key' => env('APP_KEY', 'SomeRandomStringSomeRandomString'),
在终端中编写此命令
heroku config:set APP_KEY=SomeRandomStringSomeRandomString
答案 2 :(得分:3)
在heroku中使用以下命令设置2个配置变量:
1 heroku config:set APP_DEBUG=true
2 heroku config:set APP_KEY=RandomString
设置这些键后,您将看到实际错误,而不是一般的500。
答案 3 :(得分:1)
我发现了为什么我有500错误。这是因为我把日期配置错了。
所以,这post解决了我的问题。
在研究过程中发现错误时,我发现laravel在部署时也有调试消息。所以我将调试模式更改为true。
目录:“laravel / config / app.php”
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => env('APP_DEBUG', true),
答案 4 :(得分:1)
我还想补充说我也遇到了这个问题,但这是因为我忘了为Heroku应用添加APP_KEY
。
答案 5 :(得分:1)
尝试使用此heroku config:set APP_DEBUG=true
,然后访问您的应用并查看错误的确切原因。数据库连接很可能失败或缺少.env
密钥。