问题标签 [doctrine-migrations]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 将 Docker 容器部署到 AWS 时运行数据库迁移命令
请多多包涵。对 Docker 来说很新。
我正在使用CodeDeploy将 Docker 容器(分离)部署到 AWS EC2 注册表。在部署时,在设置一些环境变量等后运行以下命令:
容器运行在 EC2 容器服务中定位和标记的图像。到目前为止没有问题。
由于这是一个 PHP 应用程序(特别是 Symfony2 应用程序),我通常需要发出以下命令来在部署时执行数据库迁移:
现在,是否可以在“docker run ...”期间运行此命令,同时保持容器运行,或者我是否需要专门为此命令运行另一个容器?
非常感谢!
mysql - 教义复合主键迁移
- 我的 Symfony 项目中有带有复合主键的 Doctrine 实体:
- 运行
bin/console doctrine:migration:diff
以创建迁移 - Doctrine 为 MySQL 数据库创建 PRIMARY KEY (article, serie), INDEX(article), INDEX(serie)。
有没有办法告诉 Doctrine 不要创建这个无用的“文章”索引?
symfony - 在部署到多台服务器期间如何在单台服务器上运行 ansible 命令?
我正在使用 Ansistrano 部署我的 Symfony2 应用程序。应用程序使用 Doctrine,我也在使用 DoctrineMigrationsBundle。现在,我的问题是我想在部署过程结束时运行数据库迁移,但我希望这个操作只被调用一次,而且我知道默认情况下 ansible 在所有给定服务器上运行来自 playbook 的所有命令。有没有办法告诉 ansible 在我部署代码的一组所有服务器中的单个服务器上运行特定命令?
symfony - Doctrine Migrations Bundle - 如何同时在多个服务器上运行迁移?
目前这可能是不可能的,但如果有人遇到同样的问题,你是如何处理的?
是否可以同时在多个服务器上运行迁移而无需多次运行相同的脚本?
我遇到的问题是我们正在使用多个服务器,并且每次我们部署新版本的 APP 时它们都会运行迁移。这会导致相同的迁移脚本运行多次(取决于运行它的服务器数量)。
有没有办法检查迁移是否正在进行,如果是,跳过它或者这是我需要手动实现的?
非常感谢。
mysql - DoctrineMigrationsBundle 每次都生成相同的迁移
我有一个带有 field 的实体$usedMB
。我使用 Doctrine2 作为 ORM 和 DoctrineMigrationsBundle 进行数据库迁移。
如果我执行 command php bin/console doctrine:migrations:diff
,我在迁移文件中得到以下行:
ALTER TABLE device_status CHANGE used_mb used_mb DOUBLE PRECISION DEFAULT NULL
之后,我执行 command php bin/console doctrine:migrations:migrate
,我得到迁移执行成功的消息。
但问题是 - 如果我php bin/console doctrine:migrations:diff
再次执行,我在迁移文件中得到相同的行:
ALTER TABLE device_status CHANGE used_mb used_mb DOUBLE PRECISION DEFAULT NULL
只是指出 - 在执行命令之间没有进行任何代码更改。
之后,我执行命令 php bin/console dictionary:migrations:migrate,然后再次 - 我收到迁移成功执行的消息。这可能会永远持续下去。
有人可以解释一下为什么每次都会产生相同的迁移吗?
symfony - 在 Doctrine Migrations 中禁用外键
我在 MySQL 数据库中使用 NDBCLUSTER 引擎。我添加了一个用于包装Connection
和添加引擎选项的类:
我在文件中定义了engine
选项config.yml
:
然后,如果我执行php app/console doctrine:migrations:diff
NDBCLUSTER 引擎,则将其添加到CREATE
语句中。但是,也添加了外键,并且 NDBCLUSTER 不接受外键。有什么方法可以禁用外键(我的意思是,不要将它们写在迁移文件中)?
symfony - Symfony3 Doctrine Migration 与多个数据库
我有一个关于与多个数据库相关的学说迁移的问题。根据这个问题和法师作为部署工具(但不仅限于法师,因为法师只自动执行手动操作):Symfony:可能加载不同的参数.yml?
当我走这条路时,在上面链接发布的问题中提到,我如何在每个数据库上进行迁移?因为在我看来,更改 AppKernel 加载器只能通过请求的 URL 进行,这对于学说迁移不存在,因为您在 shell 上运行它。
有人有提示吗,如何使用这种设置(一个应用程序源,每个多个参数的多个数据库),因为它不是我的选择,为此构建多个全栈 symfony 应用程序,因为一个安装超过 1GB应用程序之间的唯一区别是用户数据,我不想将其保存在一个数据库中,因为备份策略和其他策略(每个客户轻松备份,而不是使用 customerid 从一个数据库中提取)
希望我确实解释得足够清楚,我的问题是什么 - 并且更希望我确实设定了这个问题本身并且有人有解决方案;-)
更新和解决方案
我最终得到了一个可行的解决方案,大多数任务都是自动运行的。
首先,你必须在 SymfonyApp 中定义一个文件夹结构(我的在下面)
文件 createAppStructure.php(如果需要,可以是可选的或定制的)
createAppStructure.php
您必须在每次部署应用程序后运行此脚本 - 我确实使用 mage (Magallanes) 来部署我的应用程序。所以我确实添加了一个任务(execShell)并用法师启动这个脚本。但您也可以手动运行它。
创建结构后,您可以访问 _portals/mySUBPortal/,您将找到一个具有所有功能的完整 symfony 应用程序结构。复制了某些类型的文件(否则,由于使用了DIR或FILE,它将无法正常工作),而其他类型的文件是符号链接的。
通过这种设置,您可以拥有相同的 SymfonyApp 源,但不同的数据库和工作学说迁移......
不要忘记将自定义 VHOST (APACHE/NGINX) 放在 DOCUMENT_ROOT 位于 _PORTALS 内的位置。
php - 使用 symfony 3 使用学说迁移执行下一个/上一个迁移
我知道我可以使用 / 和版本号来运行特定execute
的up
迁移down
,即
doctrine:migrations:execute YYYYMMDDHHMMSS --down
那么我的问题 - 有没有更简单的方法来简单地运行下一个或上一个迁移而无需查找版本号?
理想情况下,我想要类似的东西
doctrine:migrations:execute --down n
wheren
是从当前指定方向运行的迁移次数。
(相同的想法rake db:rollback STEP=n
)
symfony - 使用 Symfony 迁移迁移多个数据库,无需指定数据库名称
我的 Symfony 项目中有四个不同的数据库。这些数据库在本地都有各自的名称,因此在迁移中可以将它们区分开来。我在每次迁移中都为每个表添加了 db_name.table 前缀,以便迁移正确的数据库。
现在我想在自动生成数据库名称的远程(使用flynn.io)上进行设置,但数据库名称在所有迁移中都是固定的......有没有办法从环境变量中读取数据库名称或一些类似的解决方案?
php - 如何使用多个数据库设置 symfony 3 学说迁移?
在验证和更新模式时,我正在努力让 symfony/doctrine 排除数据库视图。
我第一次尝试没有教义迁移(参见这个问题),但没有奏效。
我发现学说迁移会从验证/更新中过滤掉视图,并且确实如此,因此该步骤似乎适用于迁移。
因此,如果一个人只有一个数据库,则学说迁移可以正常工作,但至少可以说,具有多个数据库的设置并不是干净利落的。
这是一个已知问题,您可以在此链接上看到。不幸的是,当尝试遵循链接中描述的解决方案时,结果很混乱。
即使命令 migrations:update --em=default 将指示设置了正确的数据库,但在生成 migrations:diff --em=default 时,它将与其他数据库混合,同样与 migrations:migrate --em=default 结束在另一个数据库上创建表。
更具体地说,错误是: - 它将为配置文件中指示的迁移文件创建单独的目录,但不会创建相应的 em - 它会生成混合两个 em 的 mysql 查询 - 因此它将更新 db
我的设置如下:
配置.yml
然后,迁移的具体配置文件是:
学说迁移默认.yml
学说迁移使用的.yml
这是它如何混合配置的一个示例。数据库名称正确。它对应于 em=default。但其他信息来自 em=used
谢谢
== 配置
另外,如果我尝试使用以下内容专门指示配置文件:
php bin/console 学说:迁移:状态 --em=default --configuration=./app/config/doctrine_migrations_default.yml
它不会识别文件信息,即使它直接从 config.yml 获取信息时也会识别。抛出以下错误。
[Doctrine\DBAL\Migrations\MigrationException]
迁移配置键“doctrine_migrations”不存在。
如果我取出教义迁移键,它将在遇到的下一个信息中生成错误。