Laravel localhost有效,但heroku给出500错误

时间:2015-07-28 00:49:26

标签: php postgresql laravel heroku

我正在一个需要将一些数据从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;

    }

6 个答案:

答案 0 :(得分:3)

经过几个小时试图弄清楚代码发生了什么,我发现这是Apache超时的问题。

我找到了答案here

致谢:Eric Cope

答案 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密钥。