- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在努力追this教程。以下是我采取的步骤:
1.) 我首先创建空的更新日志。在运行此命令之前,我将开发 dbCreate
设置为 create
。
grails dbm-create-changelog
2.) 然后我生成初始的 gorm 更新日志。教程说我应该使用 prod
标志,但由于我的生产数据库是空的,所以我删除了 prod
标志。在运行此命令之前,我注释掉了我的开发 dbCreate
设置。
grails dbm-generate-gorm-changelog --add changelog-1.0.groovy
此时我的 migrations
文件夹包含文件 changelog.groovy
和 changelog-1.0.groovy
。我将 changelog-1.0.groovy
称为 changelog #1
3.) 我现在尝试使用我刚刚创建的更改日志来初始化我的生产数据库。我在我的配置中设置了数据库迁移 updateOnStart
和 updateOnStartFileNames
,如我链接到的教程中所示。我的生产数据库存在,但是是空的(没有表)。我的生产环境的 dbCreate
设置已被注释掉。
grails prod run-app
问题:
乍一看这似乎有效,但是当我运行 grails prod dbm-gorm-diff
并生成 changelog #2
时,我看到了应该发生的变化不存在。我还可以看到,与生产数据库的当前状态相比,变更集是合法的。这意味着生产数据库未使用 changelog #1
正确初始化。 应该不存在任何更改,因为我没有进行任何更改。我在运行 grails prod run-app
之后立即运行了 grails prod dbm-gorm-diff
。
changelog #2
中有五个变更集。我已验证所有这些变更集都在 changelog #1
中表示。 changelog #2
中的前四个变更集都有 unique: "true"
。这四个变更集也是唯一在 changelog #1
中包含 unique: "true"
的变更集。我仍然无法解释为什么存在第五个变更集。尽管它是针对 Spring Security plugin 使用的 user_role
表,但我看不出有什么特别之处。 .这是变更日志#2
:
databaseChangeLog = {
changeSet(author: "typoknig (generated)", id: "1341970550063-1") {
createIndex(indexName: "authority_unique_1341970549765", tableName: "role", unique: "true") { // This table is for the Spring Security plugin's "Role" domain class.
column(name: "authority")
}
}
changeSet(author: "typoknig (generated)", id: "1341970550063-2") {
createIndex(indexName: "name_unique_1341970549772", tableName: "foo", unique: "true") { // This is just a table for one of my domain classes that happens to have a field with a unique constraint.
column(name: "path")
}
}
changeSet(author: "typoknig (generated)", id: "1341970550063-3") {
createIndex(indexName: "name_unique_1341970549774", tableName: "bar", unique: "true") { // This is just a table for one of my domain classes that happens to have a field with a unique constraint.
column(name: "name")
}
}
changeSet(author: "typoknig (generated)", id: "1341970550063-4") {
createIndex(indexName: "username_unique_1341970549777", tableName: "user", unique: "true") { // This table is for the Spring Security plugin's "User" domain class.
column(name: "username")
}
}
changeSet(author: "typoknig (generated)", id: "1341970550063-5") {
createIndex(indexName: "FK143BF46A5FBC0B79", tableName: "user_role") { // This table is for the Spring Security plugin's "UserRole" domain class.
column(name: "role_id")
}
}
}
我需要做什么来确保我的生产数据库正确初始化?
更新 #1:
我不知道为什么,但是 createIndex
没有使用 unique: "true"
。对于前四个变更集,我只是将 unique: "true"
移动到最初在 changeset #1
中创建相关列的位置。这只留下 changelog #2
中的第五个变更集需要处理。我仍然没有看到变更集有任何问题,所以我不明白为什么它没有被应用。
更新#2:
我发现我可以将所有对 createIndex
的调用从单个变更集中移到创建表(索引所属)的相应变更集中。 这似乎解决了我所有的问题。除非有人能提供令人信服的理由不这样做,否则我想我会将这部分作为我的变更日志生成工作流程。例如这些变更集:
changeSet(author: "typoknig (generated)", id: "1342037835503-31") {
createTable(tableName: "user_role") {
column(name: "role_id", type: "bigint") {
constraints(nullable: "false")
}
column(name: "user_id", type: "bigint") {
constraints(nullable: "false")
}
}
}
changeSet(author: "typoknig (generated)", id: "1342037835503-103") {
createIndex(indexName: "FK143BF46A4E6CF59", tableName: "user_role") {
column(name: "user_id")
}
}
changeSet(author: "typoknig (generated)", id: "1342037835503-104") {
createIndex(indexName: "FK143BF46A5FBC0B79", tableName: "user_role") {
column(name: "role_id")
}
}
会出现这个变更集:
changeSet(author: "typoknig (generated)", id: "1342037835503-31") {
createTable(tableName: "user_role") {
column(name: "role_id", type: "bigint") {
constraints(nullable: "false")
}
column(name: "user_id", type: "bigint") {
constraints(nullable: "false")
}
}
createIndex(indexName: "FK143BF46A5FBC0B79", tableName: "user_role") {
column(name: "role_id")
}
createIndex(indexName: "FK143BF46A4E6CF59", tableName: "user_role") {
column(name: "user_id")
}
}
最佳答案
变更集可以依赖于目标数据库。例如,用于将 MyISAM 表与 MySQL 和 dbm-gorm-diff
一起使用的 grails.org 站点总是会添加一些 createIndex
变更集,即使它们是在以前的变更集中定义的.
我真的不明白将 createIndex
声明移动到 createTable
变更集中会有什么不同。您能否说明这样做是如何解决所有问题的?
关于Grails 数据库迁移变更日志问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11424782/
这是真的: log(A) + log(B) = log(A * B) [0] 这也是真的吗? O(log(A)) + O(log(B)) = O(log(A * B)) [1] 据我了解 O(f
0 引言 我常以为 配置 INFO 日志级别时, 应用程序代码中日志器(logger) debug 级的日志代码,不会被执行(比如,实验1中的printTestLog函数)。但今天线上的问题,
日志 日志是构建工具的主要界面。如果日志太多,真正的警告和问题容易被隐藏。另一方面,如果出了错,你需要找出相关的信息。Gradle 定义了6个日志级别,如表 18.1,“日志级别”所示。除了那些您通
日志 关键进程日志如下…(将 替换为启动服务的用户,将 替换为计算机名称) NameNode: $ HADOOP_HOME / logs / hadoop- -namenode- .log Da
我正在探索项目的 git 历史 FFMpeg .我在提交之间对每个文件执行了更改 517573a67088b5c7a25c18373434e3448892ee93和 80bb65fafab1d2f5f
我不知道如何在 loggly 中使用正则表达式进行搜索。例如,使用表达式 /24nonstop.+7554/ 记录我想查找的内容. { "level_name": "WARNING", "ex
有没有办法为 API 调用打开日志记录? 我们有一个第三方应用程序在使用我们的商店时遇到问题,希望获得一些调试信息。 ~我已经搜索了 bt 一无所获。 我正在使用 1.7 最佳答案 在一段受控的时间内
我正在尝试获取 SVN 中所有副本/移动/等的固定路径的日志历史记录(如果可能的话,递归地)。实际上,我试图避免 peg revisions ,并将日志应用于路径而不是对象。 svn 手册提出了这个问
如何在命令行中运行 NAnt 脚本并在日志文件中获取每个任务的时间? using nant task or NAnt -buildfile:testscript.build testnanttarg
是否有任何默认方式来记录哪些用户代理访问了您的服务器?我需要编制一份访问我们网站的浏览器列表,以便我们知道我们最能支持什么。 谢谢! 最佳答案 日志CGI.HTTP_USER_AGENT ,也许在 A
我在我的应用程序中使用 Spring 发送电子邮件。 我想在发送电子邮件时记录 imap 服务器操作。 我尝试按如下方式在我的 applicationContext.xml 中实现日志:
我已经运行一个 pod 一个多星期了,从开始到现在没有重启过。但是,我仍然无法查看自它启动以来的日志,它只提供最近两天的日志。容器是否有任何日志轮换策略以及如何根据大小或日期控制轮换? 我尝试了以下命
背景: 我正在设置我的第一个 flex 堆栈,尽管我将开始简单,但是我想确保我从良好的体系结构开始。我最终希望有以下解决方案:托管指标,服务器日志(expressjs APM),单页应用程序监视(AP
常规的 hg log 命令给出每个变更集至少 4 行的输出。例如 changeset: 238:03a214f2a1cf user: My Name date: Th
我在我的项目中使用 Spring iBatis 框架。然后使用 logback 进行记录。然后,在检查日志文件时,我可以看到系统正在使用的数据库...出于安全目的我想隐藏它 这是示例日志.. 12:2
我想使用 hg log 生成一个简短的变更日志,涵盖最新版本的变更。发行版标有“v”前缀,例如“v0.9.1”或“v1.0”。是否可以使用 revsets 选择以“v”开头的最后两个标签之间的范围,不
我是 PHP 的新手,所以如果有一个简单的答案,请原谅我。我在 stackoverflow 中搜索过任何类似的问题,但找不到任何帮助。 我正在开发一个现有的基于 php 的应用程序,我只需要能够将对象
我有一个名为 Radius 的程序可以验证用户登录。运行在CentOS服务器上 日志在/var/log/radius.log 中 它们如下 Mon Jul 24 22:17:08 2017 : Aut
我最近从使用“日志”切换到“日志”。 到目前为止,还不错,但我缺少一项关键功能——在运行时更改最低级别的能力。 在“logging',我可以调用 myLogger.setLevel(logging.I
假设我们有速度关键的系统(例如统计/分析、套接字编程等),我们如何设计跟踪和日志。 更具体地说,日志和跟踪通常会降低性能(即使我们有关闭机制或冗长的扩展机制)。在这种情况下,是否有任何关于如何“放置”
我是一名优秀的程序员,十分优秀!