如何使用 laravel artisan 设置 env 以拥有两个不同的数据库连接(本地/远程)?
Posted
技术标签:
【中文标题】如何使用 laravel artisan 设置 env 以拥有两个不同的数据库连接(本地/远程)?【英文标题】:How to set env with laravel artisan to have two different database connections (local/remote)? 【发布时间】:2012-12-29 21:35:06 【问题描述】:我正在寻找使用 Laravel3 设置多环境项目,但我不明白设置环境的命令。
我在这里看到:http://laravel.com/docs/artisan/commands 命令是:
php artisan foo --env=local
我已经成功使用了 artisan 和 bob,但我无法理解 foo,我尝试更改为我的项目名称,但输出始终相同:“对不起,我找不到那个任务。”
如果我尝试:php artisan --env=local
这将返回:“您忘记提供任务名称。”
有人可以帮忙吗?感谢您的宝贵时间。
[edit]现在有了答案,我可以更好地理解并改进我的问题:
我有一个创建了这些文件夹的项目:http://d.pr/i/5nZS 考虑到这一点,我需要将本地环境设置为开发,将生产设置为生产。那么,我可以使用命令“php artisan --env=local”的任何变体来做到这一点,或者我需要在我的 public/.htaccess “SetEnv LARAVEL_ENV development”中添加?
再次感谢。
【问题讨论】:
【参考方案1】:我建议首先为您的 Web 应用程序设置基于名称的虚拟主机:
<VirtualHost *:80>
ServerAdmin postmaster@localhost
DocumentRoot "__PATH TO YOUR SERVER ROOT___/project/public/"
ServerName project.dev
ErrorLog "logs/project-error.log"
CustomLog "logs/project-access.log" combined
</VirtualHost>
然后将 project.dev 添加到您的主机文件/private/etc/hosts
中,如下所示:
127.0.0.1 project.dev
之后别忘了刷新 DNS 缓存:
$ dscacheutil -flushcache
然后将[project root]/path.php
中的$environments 数组(您提到的applications/path.php 文件不存在)修改回原来的样子。原始的 *.dev 通配符将在您提供的 url 末尾选择 .dev。
$environments = array(
'local' => array('http://localhost*', '*.dev'),
);
然后在applications/config/
中创建一个名为local
的目录,在新目录中放置一个名为application.php
的文件。此文件中给出的配置将覆盖您创建的local
目录的父级中给出的相应配置文件和设置/值所设置的配置。
【讨论】:
【参考方案2】:在这里,我是如何解决我的问题的:
首先我不需要命令php artisan migrate --env=local
,我只需要在我的虚拟主机上设置:SetEnv LARAVEL_ENV development
。
其次,正如 William Cahill-Manley 所说,我需要处理 application/paths.php,即 $environments。我以前用过,但是方法不对。就我而言,我解决了这个问题:
$environments = array(
'development' => array('http://localhost/project*', '*project/*'),
'production' => array('http://project.com', 'http://*.project.com')
);
我的问题是因为我之前的代码是这样的:
$environments = array(
'development' => array('http://localhost/project*', '*project*'),
'production' => array('http://project.com', 'http://*.project.com')
);
而且因为开发数组的第二个元素,在生产服务器中总是会在开发中。
那是因为开发中的 url 是 http://project/
而生产中的 url 是 http://project.com/
或 http://user.project.com/
看,项目将强制在所有环境中由星号/通配符开发。
【讨论】:
【参考方案3】:Foo 是一个任务名称,尝试在任务文件夹中创建此文件,还有一些其他任务是预定义的,例如迁移等。
<?php
class foo_task
public function run()
echo 'this is foo';
?>
那么当你运行命令时,它会运行run函数里面的代码。
php artisan foo --env=local
【讨论】:
是的,这就是我之前的想象,但是使用“php artisan foo --env=local”这将在 env 是本地的时候运行任务,对吧?我真正需要的是将整个项目设置为本地项目或开发项目,从而使我的配置文件夹(d.pr/i/5nZS)工作并连接正确的数据库主机。【参考方案4】:"Foo" 是您要运行的任何命令。例如。迁移:
php artisan migrate --env=local
您可以做的另一件事是将您的计算机主机名添加到this array
例如,如果我的本地计算机名称是“Effinity.local”,我可以这样做
$environments = array(
'local' => array('http://localhost*', 'Effinity.local'),
);
那你不需要指定环境,只需:
php artisan migrate
希望对您有所帮助。
【讨论】:
所以,在我的本地我需要设置:"$ php artisan migrate --env=development" 在生产服务器上:"$ php artisan migrate --env=production" 有了那个和我的数组这个:gist.github.com/4557659 并且我的配置文件夹也是这样配置的:d.pr/i/5nZS 这行得通吗?我试过了,但似乎还是不行,我也试过的是“SetEnv LARAVEL_ENV development”几乎可以工作,但我需要更多时间再试一次。感谢您的回答。以上是关于如何使用 laravel artisan 设置 env 以拥有两个不同的数据库连接(本地/远程)?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Artisan CLI 没有设置正确的 URL
Laravel Artisan:`schedule:run` 是如何工作的?
Laravel - php artisan migrate - SQLSTATE[HY000] [14] 无法打开数据库文件