我有这个问题,我已经挠了好几个小时了...... 我已经构建了一个 Laravel 5.4 应用程序,已准备好进行登台测试。我能够创建数据库并运行迁移。所以问题是如何将数据从 Dev 传输到 Staging,然后再传输到 Production?
我有一个名为“regions”的表,列出了该地区的所有区域,例如“旧金山”、“东湾”、“南湾”等。我知道有一些解决方法,例如导入 sql 文件或 Laravel Seeding,但我只想知道正确的方法。
提前致谢。
最佳答案
通常,您不会将数据从一种环境传输到另一种环境。如果您需要用数据填充数据库,那么您可以使用几种方法,您似乎已经有一些使用经验。
播种者
请注意,播种器的工作方式与迁移不同,每次您发出 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
}
这增加了更多的灵 active ,能够标记是否播种某些数据,无论应用程序当前设置的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
时都会运行播种器,并且通常您不会在部署期间设置运行它。
最终,我认为没有错误的方法来做到这一点,也没有公认的标准方法,所以这实际上取决于你
关于mysql - Laravel 5 - 将 MySQL 数据从开发传输到暂存/生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51576174/