【问题标题】:Artisan::call('migrate') not working after upgrading Laravel to 4.2将 Laravel 升级到 4.2 后,Artisan::call('migrate') 不起作用
【发布时间】:2014-08-05 01:46:06
【问题描述】:

我在 Laravel 控制器方法中使用 Artisan::call('migrate');,它在 Laravel 版本为 4.1 时工作。在使用 composer update 命令(并在 composer.js 中设置 "laravel/framework": "4.2.*")更新 Laravel 之后,这个控制器方法(因为这是唯一的命令在里面)不再起作用了。

我什至在 /app/config/app.php 中添加了 'cipher' => MCRYPT_RIJNDAEL_256,如 http://laravel.com/docs/upgrade#upgrade-4.2 中所述

这已经发生了:http://laravel.io/forum/06-02-2014-not-able-run-artisan-commands

当我将 Artisan::call('migrate') 放入 try/catch 块控制器时,如下所示:

public function ArtMigr(){
    try {
            Artisan::call('migrate');
        } catch (Exception $e) {
            echo $e;
        }   

}

我收到以下错误:

异常“ErrorException”,消息“使用未定义的常量” STDIN - 假定为“STDIN” D:\htdocs\artisan_error\vendor\symfony\console\Symfony\Component\Console\Helper\QuestionHelper.php:112 堆栈跟踪:#0 D:\htdocs\artisan_error\vendor\symfony\console\Symfony\Component\Console\Helper\QuestionHelper.php(112): Illuminate\Exception\Handler->handleError(8, '使用未定义...', 'D:\htdocs\artis...', 112, 数组)#1 D:\htdocs\artisan_error\vendor\symfony\console\Symfony\Component\Console\Helper\QuestionHelper.php(49): Symfony\Component\Console\Helper\QuestionHelper->doAsk(对象(Symfony\Component\Console\Output\NullOutput), 对象(Symfony\Component\Console\Question\ConfirmationQuestion))#2 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Console\Command.php(186): Symfony\Component\Console\Helper\QuestionHelper->ask(对象(Symfony\Component\Console\Input\ArrayInput), 对象(Symfony\Component\Console\Output\NullOutput), 对象(Symfony\Component\Console\Question\ConfirmationQuestion))#3 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Console\ConfirmableTrait.php(21): Illuminate\Console\Command->confirm('Do you really w...') #4 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Database\Console\Migrations\MigrateCommand.php(59): Illuminate\Database\Console\Migrations\MigrateCommand->confirmToProceed()

5 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Console\Command.php(112):

Illuminate\Database\Console\Migrations\MigrateCommand->fire() #6 D:\htdocs\artisan_error\vendor\symfony\console\Symfony\Component\Console\Command\Command.php(252): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArrayInput), 对象(Symfony\Component\Console\Output\NullOutput))#7 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Console\Command.php(100): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArrayInput), 对象(Symfony\Component\Console\Output\NullOutput))#8 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Console\Application.php(96): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArrayInput), 对象(Symfony\Component\Console\Output\NullOutput))#9 [内部 功能]: Illuminate\Console\Application->call('migrate') #10 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Foundation\Artisan.php(57): call_user_func_array(Array, Array) #11 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php(208): Illuminate\Foundation\Artisan->__call('call', Array) #12 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php(208): Illuminate\Foundation\Artisan->call('migrate') #13 D:\htdocs\artisan_error\app\controllers\HomeController.php(160): Illuminate\Support\Facades\Facade::__callStatic('call', Array) #14 D:\htdocs\artisan_error\app\controllers\HomeController.php(160): Illuminate\Support\Facades\Artisan::call('migrate') #15 D:\htdocs\artisan_error\app\controllers\HomeController.php(145): HomeController->InstallDatabaseStructure() #16 D:\htdocs\artisan_error\app\controllers\HomeController.php(127): HomeController->WriteDatabaseCredentials('localhost', 'laravel-aplikac...', 'root', '') #17 [内部函数]: HomeController->postTestDatabaseConnection() #18 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Routing\Controller.php(231): call_user_func_array(Array, Array) #19 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(93): Illuminate\Routing\Controller->callAction('postTestDatabas...', Array)

20 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(62):

Illuminate\Routing\ControllerDispatcher->call(Object(HomeController), 对象(照亮\路由\路由),'postTestDatabas ...')#21 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Routing\Router.php(930): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), 对象(照亮\Http\Request),'HomeController', 'postTestDatabas...') #22 [内部函数]: Illuminate\Routing\Router->Illuminate\Routing{closure}() #23 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Routing\Route.php(105): call_user_func_array(Object(Closure), Array) #24 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Routing\Router.php(996): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request)) #25 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Routing\Router.php(964): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))

26 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(738):

Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))

27 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(708):

Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))

28 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Session\Middleware.php(72):

Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1、真)#29 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Cookie\Queue.php(47): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1、真)#30 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Cookie\Guard.php(51): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, 真的)#31 D:\htdocs\artisan_error\vendor\stack\builder\src\Stack\StackedHttpKernel.php(23): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, 真的)#32 D:\htdocs\artisan_error\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(606): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request)) #33 D:\htdocs\artisan_error\public\index.php(49): Illuminate\Foundation\Application->run() #34 {main}

我的一切都做得很好吗?

composer.js 包含:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "laravel/framework": "4.2.*",
        "way/generators": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

【问题讨论】:

标签: php symfony laravel laravel-4


【解决方案1】:

有关此主题的一些信息,对于遇到此问题的任何人:

这是因为生产环境中的migrate 命令会要求确认。然而,这在 Web 请求的上下文中是不可能的,因此命令失败。要阻止它要求确认,请使用--force 标志。

错误Use of undefined constant STDIN - assumed 'STDIN 基本上是symfony 告诉你它没有可用于查询用户输入的标准输入。如果您没有在终端中运行该命令,这是预期的行为。此行为在当前版本的symfony/console 中仍然存在(截至撰写时为 5.0.*)。

另外请注意,在这种情况下,尝试按照http://github.com/symfony/symfony/issues/10795 中的建议手动定义 STDIN 将不起作用。

【讨论】:

    【解决方案2】:

    是的,实际上上一个版本有问题,以前的所有资源都不起作用,应该使用:

    Artisan::call('migrate', array('--force' => true));
    

    经过测试,工作正常。

    【讨论】:

    • 这是我运行 Laravel 4.2 的有效答案。
    • 在 Laravel 7 上抛出一个致命错误,说 --force option is not allowed
    【解决方案3】:

    我认为您必须在通话中添加'-n'=>true

    因为你在生产中并且“你确定问题被解雇了”

    所以它会像

    Artisan::call('migrate',array('-n'=>true));

    【讨论】:

      【解决方案4】:

      Use of undefined constant STDIN 似乎是 Symfony 错误,请参阅 github.com/symfony/symfony/issues/10795

      composer update 应该可以解决您的问题。

      【讨论】:

      • @mpet,向我们展示你的composer.json 的样子。把它放在你原来的帖子里。
      • @mpet,将minimal-stability 更改为RC(或beta,如果这不起作用),Symfony 问题的更改已推送至2.5.0-RC1 版本。
      • 但正确的问题是为什么在使用 Laravel 4.2 时使用默认值会发生这种情况
      猜你喜欢
      • 2017-04-06
      • 2017-01-07
      • 1970-01-01
      • 2017-10-10
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2017-08-08
      相关资源
      最近更新 更多