Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 命令行上的laravel环境与浏览器中的不同_Amazon Web Services_Laravel 4_Amazon Elastic Beanstalk - Fatal编程技术网

Amazon web services 命令行上的laravel环境与浏览器中的不同

Amazon web services 命令行上的laravel环境与浏览器中的不同,amazon-web-services,laravel-4,amazon-elastic-beanstalk,Amazon Web Services,Laravel 4,Amazon Elastic Beanstalk,我已将我的laravel应用程序部署到弹性豆茎环境中。此应用程序使用bootstrap/start.php中的这段代码检测其环境 $env = $app->detectEnvironment(function () { return getenv('APP_ENV') ?: 'local'; }); 当elastic beanstalk启动时,它会运行我设置的配置文件,以检测是否设置了参数。在本例中,我将此参数设置为development,然后配置文件基于此设置环境变量 APP_

我已将我的laravel应用程序部署到弹性豆茎环境中。此应用程序使用bootstrap/start.php中的这段代码检测其环境

$env = $app->detectEnvironment(function () {
    return getenv('APP_ENV') ?: 'local';
});
当elastic beanstalk启动时,它会运行我设置的配置文件,以检测是否设置了参数。在本例中,我将此参数设置为development,然后配置文件基于此设置环境变量

APP_ENV = development
DB_HOST = rds dev endpoint
DB_NAME = rds dev db name
DB_USERNAME = dev username
DB_PASSWORD = devdb pass
当我在浏览器中访问应用程序时,它正在按预期工作,并且正确连接到开发数据库

当我使用ssh连接到服务器并尝试运行

php artisan migrate
我得到一个pdo异常,没有这样的文件或目录

当我跑的时候

php artisan env
即使定义了环境变量APP_ENV,也会返回local。我非常确定这个变量是定义的,因为当浏览器中出现laravel错误时,我可以在服务器/请求数据中看到具有值开发的变量,以及在环境启动时创建的其他环境变量

我错过了什么

经过编辑,包括基于antonios答案的个性化解决方案

.环境

<?php
if (getenv('PARAM1') === false) {
    return false;
} else {
    switch (getenv('PARAM1')) {
        case 'development':

            return array(
                'APP_ENV' => 'development',

                'DB_HOST' => '***',
                'DB_NAME' => '***',
                'DB_USERNAME' => '***',
                'DB_PASSWORD' => '***',
                );
            break;

        case 'staging':

            return array(
                'APP_ENV' => 'staging',

                'DB_HOST' => '***',
                'DB_NAME' => '***',
                'DB_USERNAME' => '***',
                'DB_PASSWORD' => '***',
                );
            break;

        case 'production':

            return array(
                'APP_ENV' => 'production',

                'DB_HOST' => '***',
                'DB_NAME' => '***',
                'DB_USERNAME' => '***',
                'DB_PASSWORD' => '***',
                );
            break;
    }
}
当你跑的时候

php artisan migrate
php在不同的用户(而不是web服务器)下运行,因此您需要:

php artisan migrate --env=development
编辑

cli和web出现问题是我不使用这些web服务器env-vars的原因之一。这是我在环境中的工作方式:

在应用程序的根目录中创建.environment文件并定义环境:

<?php

return array(

     'APP_ENV' => 'development',

     'POSTGRESQL.HOST' => 'localhost',
     'POSTGRESQL.DATABASE_NAME' => 'laraveldatabase',
     'POSTGRESQL.DATABASE_USER' => 'laraveluser',
     'POSTGRESQL.DATABASE_PASSWORD' => '!Bassw0rT',

);
foreach(require __DIR__.'/../.environment' as $key => $value) 
{
    putenv(sprintf('%s=%s', $key, $value));
}
然后你只需要使用它:

$env = $app->detectEnvironment(function () {
    return getenv('APP_ENV');
});
它将在任何地方发挥作用:

<?php

return array(

    'connections' => array(

         'postgresql' => array(
              'driver'   => 'pgsql',
              'host'     => getenv('POSTGRESQL.HOST'),
              'database' => getenv('POSTGRESQL.DATABASE_NAME'),
              'username' => getenv('POSTGRESQL.DATABASE_USER'),
              'password' => getenv('POSTGRESQL.DATABASE_PASSWORD'),
              'charset'  => 'utf8',
              'prefix'   => '',
              'schema'   => 'public',
         ),

    ),

);

因为我想让它在我部署应用程序的每台服务器上都失败。

这是有道理的,我只是尝试了一下,却得到了同样的错误。因为它使用的是web服务器以外的其他用户,所以它是否应该访问所需的环境变量?我刚刚重新阅读了我的aws支持案例,当时我得到了设置eniroment变量的方法,他说“另外一件值得注意的事情是,以这种方式设置的自定义环境变量将无法通过控制台进行修改。”谢谢,当我有机会今天开始尝试时,我会尝试一下,我有一个问题。是否为每个环境创建不同的.environment文件?在git中,我有一个master、staging和development环境。如果.Environment在.gitignore文件中,并且我从“开发”切换到“暂存”,那么.Environment文件不会随着开发环境的详细信息而保持不变吗?您是否在同一主机中使用所有三个环境?我在每个文件夹/主机中创建一个.environment文件。我的开发环境有一个,它与我在生产服务器上的开发环境完全不同,如果有人与我一起开发,在同一台服务器上,她的.environment开发文件在某些方面与我的不同,可能数据库名称不同,但是几乎其他任何东西都可以是相同的,不会发生冲突。如果它起作用,那么您可以有3个不同的文件,然后通过执行
require\uuu DIR\uu./...environment.'.getenv('YOURENVIRONMENTVARIABLE')
Ok,然后在git中获得所有变量????我和你的情况完全一样
<?php

return array(

    'connections' => array(

         'postgresql' => array(
              'driver'   => 'pgsql',
              'host'     => getenv('POSTGRESQL.HOST'),
              'database' => getenv('POSTGRESQL.DATABASE_NAME'),
              'username' => getenv('POSTGRESQL.DATABASE_USER'),
              'password' => getenv('POSTGRESQL.DATABASE_PASSWORD'),
              'charset'  => 'utf8',
              'prefix'   => '',
              'schema'   => 'public',
         ),

    ),

);
return getenv('APP_ENV') ?: 'local';