将mysql数据从dev传输到staging/production

gtlvzcf8  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(402)

这个问题在这里已经有答案了

laravel:生产数据的迁移和播种(4个答案)
两年前关门了。
我有一个问题,我已经挠了我的头好几个小时。。。我已经建立了一个laravel5.4应用程序,准备在舞台上进行测试。我能够创建数据库并运行迁移。所以问题是如何将数据从dev传输到staging,然后再传输到生产?
我有一张名为“地区”的表格,列出了该地区的所有地区,如“旧金山”、“东湾”、“南湾”等。我知道有一些解决方法,比如导入sql文件或laravel种子,但我只想知道正确的方法。
提前谢谢。

shstlldc

shstlldc1#

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

播种机

请注意,播种机的工作方式与迁移不同,每次发布作业时,播种机都会运行 php artisan db:seed 命令,这可能不是部署过程的一部分,因为它通常会导致重复数据。它的主要用途是在开发过程中重新填充数据库。既然是这样,我建议改用迁移。
我见过许多应用程序使用带条件语句的seeders来决定是否基于当前环境对数据进行播种:

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 它通常是在部署过程中不会设置为运行的。
最终,我不认为有一个错误的方法去做,也没有一个被接受的,标准的方法去做,所以它真的取决于你

相关问题