当我ssh到我的本地流浪机器时,我可以执行所有的工匠命令。然而,在它之外,任何需要访问数据库的命令(如artisan migrate)都会给出Access denied for user 'root'@'localhost'
。如果可能的话,我如何使用artisan而不需要登录流浪机?
我也想做,例如Artisian::call('migrate')
,例如在测试期间。但是这会产生同样的错误
access denied
错误的原因是mysql默认限制对本地机器的数据库访问。可以像这里描述的那样打开远程连接,但是对于生产环境来说这不是一个好主意。
更好的方法是为您想要的命令添加别名,如下所述。
为了在代码中调用artisan等,Laravel有一种在远程服务器上运行命令的内置方式。首先将连接信息添加到app/config/remote.php文件中。对于vagrant,它应该看起来像这样:
'connections' => array(
'production' => array(
'host' => 'localhost',
'username' => 'vagrant',
'password' => 'vagrant',
'key' => '',
'keyphrase' => '',
'root' => '/vagrant',
),
),
然后像这样执行artisan migrate:
SSH::run(array('cd /vagrant', 'php artisan migrate'));
你也可以做更高级的事情。这里是文档