【问题标题】:Laravel 5 Production Migrations -- Unable to Disable Migration WarningLaravel 5 生产迁移——无法禁用迁移警告
【发布时间】:2019-08-12 18:59:35
【问题描述】:

我正在尝试在生产模式下部署 Laravel 网站。该站点当前已部署,但我添加了一个数据库和一些迁移以及种子,迁移的部署失败。

日志向我显示迁移失败,因为生产模式显示了一个提示

Migrating the database tables into your application
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? (yes/no) [no]:
 > 

  Aborted  

我尝试通过在我的部署脚本中将“yes”输入迁移命令来解决此问题,但它不起作用。大概我可以将模式更改为不生产,但我认为这不是一个合适的解决方法。我也尝试使用“--force”标志进行迁移,但它并没有阻止警告。

部署脚本

cd /home/forge/default
git pull origin master
npm install --save-dev cross-env
npm install
composer require nesbot/carbon:1.26.3
composer require tcg/voyager
composer install --no-interaction --prefer-dist --optimize-autoloader
npm run development
echo "" | sudo -S service php7.2-fpm reload

if [ -f artisan ]
then
    php artisan config:cache
    php artisan voyager:install
    php artisan migrate --force
    php artisan db:seed --class=CategoriesTableSeeder --force
    php artisan db:seed --class=UsersTable --force
    php artisan db:seed --class=BlogPostsTableSeeder --force
fi

有谁知道我如何在生产环境中禁用此警告,或者为什么 force 选项没有抑制此警告以便我可以运行迁移?

谢谢!

【问题讨论】:

  • 你可以试试php artisan migrate --pretend,回答“是”,看看建议的sql命令是否推出。然后至少您会知道是 laravel 中止还是您的数据库拒绝更改现有表。

标签: laravel-5 deployment migration production-environment


【解决方案1】:

您也可以尝试--no-interaction 标志,但看起来您所拥有的 (--force) 是正确的。您确定没有其他东西正在运行您的迁移,例如 voyager:install 自动运行迁移,或 post-install 作曲家中的脚本吗?

也只是感兴趣,为什么要在 Forge 部署脚本中安装软件包。它们应该包含在package.lockcomposer.lock 文件的repo 中,因此您只需要运行install

【讨论】:

  • 我用“--no-interaction”运行命令它甚至没有询问就取消了,是否有一个环境变量可以设置响应?
  • 文档本身提到该命令应该使用 --force 标志运行,以防您不想要交互,这个解决方案似乎是一个黑客,因为强制是阻止许多安全检查的东西,这是完全不推荐在生产级别的东西。从安全角度不确定使用 --force 标志有多危险,可能标志的名称应该更改或应该引入新标志以防止这种交互,以便在自动化环境中发生事情
猜你喜欢
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
相关资源
最近更新 更多