【问题标题】:Laravel 5 - Transfer MySQL data from Dev to Staging/Production [duplicate]Laravel 5 - 将 MySQL 数据从 Dev 传输到 Staging/Production [重复]
【发布时间】:2019-01-05 15:41:35
【问题描述】:

我有一个问题,我已经挠头好几个小时了...... 我已经构建了一个 Laravel 5.4 应用程序,可以在 staging 上进行测试。我能够创建数据库并运行迁移。所以问题是如何将数据从 Dev 传输到 Staging,然后再传输到 Production?

我有一个名为“regions”的表,其中列出了该地区的所有地区,例如“旧金山”、“东湾”、“南湾”等。我知道有一些解决方法,比如导入 sql 文件或 Laravel Seeding,但我只想知道正确的方法。

提前致谢。

【问题讨论】:

  • SQL 文件会更快,但为了部署和重新部署,将数据放在迁移(或种子)中可能会更好。取决于我想你有多少数据,或者你是否可以编写一个脚本来为你进行迁移。

标签: mysql laravel laravel-5 seeding


【解决方案1】:

通常您不会将数据从一个环境传输到另一个环境。如果您需要使用数据填充数据库,但是您可以使用几种方法,您似乎已经有一些使用经验。

播种机

请注意,播种器不像迁移那样工作,播种器将在您每次发出 php artisan db:seed 命令时运行,这可能不是您在部署过程中想要的,因为它通常会导致在重复数据中。它的主要用途是在开发过程中重新填充数据库。既然是这种情况,我建议改用迁移。

我见过很多应用程序使用带有条件语句的播种器来决定是否根据当前环境播种数据:

class MyTableSeeder extends Seeder
{
    if (in_array(config('env'), ['production', 'staging'])) {
        // Seed data for production or staging
    } elseif (config('env') == 'dev') {
        // Seed data only for dev environment
    }

    // Seed data for ALL environments (Production, staging, dev) etc. You get the picture
}

我已经看到一些创建自己的配置项和辅助函数来确定是否应该迁移数据,而不是简单地依赖 env 配置项,所以你会在播种器中看到类似的东西而不是if 语句检查env 配置项的值:

if (should_seed_data()) {
    // Seed data here
}

这为能够标记是否播种某些数据增加了一点灵活性,而不管应用程序当前设置为什么env

迁移(推荐)

如果您需要在部署过程中用数据填充数据库,例如在您的情况下,您可能正在部署一个需要用区域数据填充数据表才能工作的功能,我建议您这样做作为迁移过程的一部分:

class YourMigration extends Migration
{
    protected $regions = ['East Bay', 'South Bay'];

    public function up()
    {
        // Seed your region data here
        foreach ($this->regions as $name) {
            Region::create(['name' => $name]);
        }
    }
}

使用迁移而不是播种机的最大优势是迁移仅打算运行一次。迁移后,Laravel 会跟踪已经运行的迁移,并且不会重复它们,因此您不必担心数据会多次在那里结束。另一方面,每次运行 php artisan db:seed 时都会运行播种器,通常不会设置为在部署期间运行。

最终,我认为没有错误的方法可以做到,也没有公认的标准方法,所以这完全取决于你

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多