How to set up different environments on Laravel 4?
我试图在Laravel 4应用程序上设置多个环境,并根据我们所处的环境自然地设置不同的数据库。
对于本地计算机,我为" local.elders.dev"设置了一个虚拟主机。
不幸的是,由于某种原因,以下代码无法正常工作。
也许我需要执行一个工匠命令或其他操作。 我觉得我已经接近了,但还没到那儿!
谢谢大家 !
另一种方法是使用项目所在的文件夹的名称。此方法可在控制台和Web中使用。如果在同一服务器上托管不同的环境,我发现这是唯一可靠的方法。
1 2 3 4 5 |
一个很大的优点是,您可以通过简单地重命名或复制项目文件夹而不将文件,数据库记录或环境变量更改为生产环境。
使用Laravel 4x在同一台机器上处理多个环境
如果要在同一台计算机上以相同的名称运行多个环境(例如,登台和生产以及本地环境)怎么办?
在Laravel 4x中有一个更好的处理环境的解决方案,可以通过向您的vhosts file-或.htaccess文件添加一个衬板来实现:
设置本地环境变量
在vhost或.htaccess中添加用于本地安装(用于登台),例如,添加:
1 | SetEnv LARAVEL_ENV staging |
并与您的生产.htaccess或vhost中的相同:
1 | SetEnv LARAVEL_ENV production |
然后在start.php中使用通常的detectEnvironment()函数。
1 2 3 4 5 | $env = $app->detectEnvironment(function() { // Default to local if LARAVEL_ENV is not set return getenv('LARAVEL_ENV') ?: 'local'; }); |
我们没有忘记本地...这是很酷的部分-如果在vhost或.htaccess中都没有找到环境变量,那么您的安装将默认为本地,就像在其他安装中一样。
我知道这已经解决了,但对于其他正在寻找解决方案的人来说...
我的环境检测设置如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 | $env = $app->detectEnvironment(array( // Development // any machine name with the term"local" will use the local environment 'local' => array('*local*'), // Stage // any machine name with the term"stage" will use the stage environment 'stage' => array('*stage*') // Production // production is default, so we don't need to specify any detection |
));
这很方便,因为只要我使用"本地"进行开发(例如" localhost"," localhost:8000"," my.app.local"等),它就可以在任何项目上使用。"舞台"也一样。生产是默认的,因此任何没有"本地"或"阶段"的东西都可以用于生产。
好 !我刚刚解决了这个问题...代码实际上可以正常运行!问题是我正在使用
1 | $_SERVER['DB1_HOST'] //for Pagodabox. |
当然,这不是在我的本地环境中设置的,这几乎破坏了应用程序...
我通过简单地解决:
1 |
感谢@jeroen和@theshiftexchange :)
Laravel 4通过在" bootstrap / start.php"文件中指定的机器名称来检测环境。
例如,在我的情况下,配置变为:
这意味着Laravel将为两台计算机使用"本地"环境设置:" Victor.local"(Mac)和" Victor-PC"(Windows)。
为了知道当前的机器名称,可以使用以下PHP代码:
对于每种环境,您都可以在app / config中创建一个文件夹,并替换所需的配置文件和属性。
问候!
尝试用