【问题标题】:Run Laravel Database Migration after every build on Google App Engine每次在 Google App Engine 上构建后运行 Laravel 数据库迁移
【发布时间】:2018-01-21 20:50:53
【问题描述】:

我在 GAE 上使用 MySQL 实例运行数据库运行 Laravel 5.5。我希望能够在每次构建后运行数据库迁移。我在 composer.json 的 post-install-cmd 上添加了命令“php artisan migrate”,但它似乎不起作用。

"post-install-cmd": [
        "chmod -R 755 bootstrap\/cache",
        "php artisan migrate",
        "php artisan cache:clear"
    ]

构建日志显示命令正在运行,但看起来那里的命令已取消。可能是什么问题?每次构建后如何运行迁移?任何帮助将不胜感激。

Here is screenshot of the build logs

SQL 错误:

ERROR: SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = My_DB_NAME and table_name = migrations) SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = My_DB_NAME and table_name = migrations) at /app/vendor/laravel/framework/src/Illuminate/Database/Connec‌​tion.php:664, PDOException(code: 2002): SQLSTATE[HY000] [2002] No such file or directory at

【问题讨论】:

  • App Engine 日志位于由 GAE 应用程序过滤的 [日志记录选项卡](console.cloud.google.com/logs) 中。但是,如果您使用 Google 搜索错误 (laravel migrate SQLSTATE[HY000] [2002] No such file or directory),您可能会找到一些对您也有帮助的答案。最后,here 有一个在 AppEngine 上运行 Laravel 的指南,你可能想看看。最后一个问题:您是否尝试过在 CloudSQL 实例中而不是在 AppEngine 部署中运行迁移命令?这行得通吗?
  • 您提供的教程是我遵循的。该应用程序部署和运行良好,我可以连接到数据库,但迁移没有运行。对于在 CloudSQL 实例中运行迁移命令的部分,我该怎么做?
  • 日志没有显示任何异常。同样的错误是我在部署时(它是一个构建错误)而不是应用程序错误。部署应用程序后工作正常,连接 SQL 实例(数据库),插入和检索数据。注意:我使用云控制台创建了一些虚拟表和数据
  • 如果您在日志过滤器的第二个下拉菜单中按activity 过滤(或使用过滤器logName="projects/<PROJECT_ID>/logs/cloudaudit.googleapis.com%2Factivity" ),您还可以查看有关版本创建和更新的日志。您可以按照您所说的 tutorial 中的第 6 步在本地执行迁移。
  • 我想在生产环境中而不是在本地运行迁移。在本地,它们运行良好。

标签: google-app-engine laravel-5


【解决方案1】:

简答:

您需要在构建服务器上设置与生产数据库和 laravel 应用程序的云 SQL 连接。然后在代码部署到 google 后运行迁移。


如何安装 gcloud SDK?

https://github.com/GoogleCloudPlatform/continuous-deployment-bitbucket(检查 bitbucket-pipelines.yml)

如何设置谷歌云 SQL 代理?

https://cloud.google.com/sql/docs/mysql/connect-admin-proxy

如何设置 laravel 应用连接云端 SQL 代理?

DB_HOST=127.0.0.1DB_PORT=3306 添加到.env 文件或您选择的任何端口。

运行迁移并享受!


长答案:

当您通过 SSH 连接到 GAE 实例时,您还看不到您的代码。它隐藏在另一层 Docker 容器之下。就我而言,有 5 个容器正在运行:gaeapp、cloudsql、api、nginx_proxy 和 fluentd_logger。如您所见,cloudsql 是容器之一,这意味着您的应用程序容器和 cloudsql 都必须构建才能相互连接。

最有可能发生的情况是包含您的代码的容器是在 cloundsql 之前配置的。因此,任何与数据库相关的命令,或者如果您在 laravel 启动期间执行了与数据库相关的代码,都会导致 SQLSTATE[HY000] [2002] No such file or directory 因为 /cloudsql/ directory/socket 尚未准备好。

因此,最直接的方法是从其他任何地方而不是从 GAE 运行迁移。可能也可以更新 GAE 的 docker config,但我不是很熟悉。


希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您需要将 --no-interaction--force 标志添加到 migrate 命令。由于您在生产中,它会提示您输入 YN 来运行命令。

    php artisan migrate  --no-interaction --force
    

    【讨论】:

    • 当我这样做时,我得到这个错误 ERROR: SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = My_DB_NAME and table_name = migrations) SQLSTATE [HY000] [2002] /app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664 中没有这样的文件或目录(SQL:从 information_schema.tables 中选择 *,其中 table_schema = My_DB_NAME 和 table_name = 迁移) , PDOException(code: 2002): SQLSTATE[HY000] [2002] 没有这样的文件或目录在
    • 嗯,有些东西不在它应该在的地方。你能验证迁移文件在database/migrations 中吗?另外,My_DB_NAME 是否需要替换,还是您的数据库的实际名称?
    • 出于安全原因,我在此评论中将数据库名称替换为 My_DB_NAME
    • 检查storage/logs 中的日志文件,它是否包含此异常的完整堆栈跟踪?知道哪个文件不存在会很有帮助。
    • 我的两分钱想法是在 Laravel 运行运行迁移之前,应用程序正在尝试访问迁移表以查看尚未运行的迁移批次。由于没有创建表(迁移也创建了迁移表),所以它返回错误,因为它找不到表
    【解决方案3】:
    Was not able to add such a long log file as a comment. So trying here.
    
    <pre>
    [2020-05-03 08:51:50] local.ERROR: SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = aimforthesky and table_name = migrations and table_type = 'BASE TABLE') {"exception":"[object] (Illuminate\\Database\\QueryException(code: 2002): SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = aimforthesky and table_name = migrations and table_type = 'BASE TABLE') at /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php:671)
    [stacktrace]
    #0 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(631): Illuminate\\Database\\Connection->runQueryCallback('select * from i...', Array, Object(Closure))
    #1 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(339): Illuminate\\Database\\Connection->run('select * from i...', Array, Object(Closure))
    #2 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php(18): Illuminate\\Database\\Connection->select('select * from i...', Array)
    #3 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php(169): Illuminate\\Database\\Schema\\MySqlBuilder->hasTable('migrations')
    #4 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(608): Illuminate\\Database\\Migrations\\DatabaseMigrationRepository->repositoryExists()
    #5 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php(93): Illuminate\\Database\\Migrations\\Migrator->repositoryExists()
    #6 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php(64): Illuminate\\Database\\Console\\Migrations\\MigrateCommand->prepareDatabase()
    #7 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(541): Illuminate\\Database\\Console\\Migrations\\MigrateCommand->Illuminate\\Database\\Console\\Migrations\\{closure}()
    #8 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php(81): Illuminate\\Database\\Migrations\\Migrator->usingConnection(NULL, Object(Closure))
    #9 [internal function]: Illuminate\\Database\\Console\\Migrations\\MigrateCommand->handle()
    #10 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(33): call_user_func_array(Array, Array)
    #11 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
    #12 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(91): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
    #13 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
    #14 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/Container.php(592): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
    #15 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate\\Container\\Container->call(Array)
    #16 /home/nitish/code/aimforthesky/vendor/symfony/console/Command/Command.php(255): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
    #17 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
    #18 /home/nitish/code/aimforthesky/vendor/symfony/console/Application.php(912): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #19 /home/nitish/code/aimforthesky/vendor/symfony/console/Application.php(264): Symfony\\Component\\Console\\Application->doRunCommand(Object(Illuminate\\Database\\Console\\Migrations\\MigrateCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #20 /home/nitish/code/aimforthesky/vendor/symfony/console/Application.php(140): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #21 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #22 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #23 /home/nitish/code/aimforthesky/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #24 {main}
    [previous exception] [object] (PDOException(code: 2002): SQLSTATE[HY000] [2002] No such file or directory at /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70)
    [stacktrace]
    #0 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(70): PDO->__construct('mysql:unix_sock...', 'root', '', Array)
    #1 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(46): Illuminate\\Database\\Connectors\\Connector->createPdoConnection('mysql:unix_sock...', 'root', '', Array)
    #2 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection('mysql:unix_sock...', Array, Array)
    #3 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(182): Illuminate\\Database\\Connectors\\MySqlConnector->connect(Array)
    #4 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
    #5 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(926): call_user_func(Object(Closure))
    #6 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(961): Illuminate\\Database\\Connection->getPdo()
    #7 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(405): Illuminate\\Database\\Connection->getReadPdo()
    #8 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(331): Illuminate\\Database\\Connection->getPdoForSelect(true)
    #9 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(664): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}('select * from i...', Array)
    #10 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(631): Illuminate\\Database\\Connection->runQueryCallback('select * from i...', Array, Object(Closure))
    #11 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Connection.php(339): Illuminate\\Database\\Connection->run('select * from i...', Array, Object(Closure))
    #12 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php(18): Illuminate\\Database\\Connection->select('select * from i...', Array)
    #13 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php(169): Illuminate\\Database\\Schema\\MySqlBuilder->hasTable('migrations')
    #14 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(608): Illuminate\\Database\\Migrations\\DatabaseMigrationRepository->repositoryExists()
    #15 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php(93): Illuminate\\Database\\Migrations\\Migrator->repositoryExists()
    #16 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php(64): Illuminate\\Database\\Console\\Migrations\\MigrateCommand->prepareDatabase()
    #17 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(541): Illuminate\\Database\\Console\\Migrations\\MigrateCommand->Illuminate\\Database\\Console\\Migrations\\{closure}()
    #18 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php(81): Illuminate\\Database\\Migrations\\Migrator->usingConnection(NULL, Object(Closure))
    #19 [internal function]: Illuminate\\Database\\Console\\Migrations\\MigrateCommand->handle()
    #20 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(33): call_user_func_array(Array, Array)
    #21 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
    #22 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(91): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
    #23 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
    #24 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Container/Container.php(592): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
    #25 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate\\Container\\Container->call(Array)
    #26 /home/nitish/code/aimforthesky/vendor/symfony/console/Command/Command.php(255): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
    #27 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))#28 /home/nitish/code/aimforthesky/vendor/symfony/console/Application.php(912): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #29 /home/nitish/code/aimforthesky/vendor/symfony/console/Application.php(264): Symfony\\Component\\Console\\Application->doRunCommand(Object(Illuminate\\Database\\Console\\Migrations\\MigrateCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #30 /home/nitish/code/aimforthesky/vendor/symfony/console/Application.php(140): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #31 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #32 /home/nitish/code/aimforthesky/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #33 /home/nitish/code/aimforthesky/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
    #34 {main}
    "}
    </pre>
    

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多