gpt4 book ai didi

grails - 如果指定任何上下文,则grails 2.5 dbm-update总是会因MissingMethodException失败

转载 作者:行者123 更新时间:2023-12-02 16:00:28 29 4
gpt4 key购买 nike

如果使用dbm-update指定任何上下文,我们总是会得到异常,无论该上下文是否具有任何changeSets。如果我们不指定上下文,那么我们将获得一切-它可以工作,但显然会创建不合适的数据。

由于没有实际的示例,我们在Windows 8(和Java 7 64位,mysql 5.6)上尝试了许多可能的语法命令,包括:

grails dbm-update --stacktrace --verbose --contexts="ABC"
grails dbm-update --stacktrace --verbose "--contexts=ABC"
grails dbm-update --stacktrace --verbose "--contexts=[ABC]"
grails dbm-update --stacktrace --verbose --contexts=ABC

所有变体都提供以下堆栈跟踪:
groovy.lang.MissingMethodException: No signature of method: liquibase.Liquibase.update() is applicable for argument types: (java.lang.Boolean) values: [true]
Possible solutions: update(java.lang.String), update(int, java.lang.String), update(java.lang.String, java.io.Writer), u
pdate(int, java.lang.String, java.io.Writer), validate(), isCase(java.lang.Object)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:56)
at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:122)
at DbmUpdate$_run_closure1$_closure2.doCall(DbmUpdate:26)
at DbmUpdate$_run_closure1$_closure2.doCall(DbmUpdate)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaM
ethodSite.java:207)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:68)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:114)
at _DatabaseMigrationCommon_groovy$_run_closure2$_closure11.doCall(_DatabaseMigrationCommon_groovy:59)
at _DatabaseMigrationCommon_groovy$_run_closure2$_closure11.doCall(_DatabaseMigrationCommon_groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaM
ethodSite.java:207)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:68)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:114)
at grails.plugin.databasemigration.MigrationUtils.executeInSession(MigrationUtils.groovy:133)
at grails.plugin.databasemigration.MigrationUtils$executeInSession$3.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)

注意:这只是实际堆栈跟踪的一小部分。

我们定义的上下文仅有的变更集如下:
<changeSet id="baseline_data_account_type_uk" author="me.me" context="UK">
<comment>Insert UK account types</comment>
<sqlFile path="sql//baseline//account_type_UK.sql" />
</changeSet>

如果我们没有在dbm-update命令行上指定任何上下文,它将在此变更集中正确运行简单的更新SQL没问题,因此它与变更集或changelog无关。

我当然在dev dataSource中删除了“dbCreate = xxx”行。

这是一个完整的猜测,但这可能与插入sql中的 bool(boolean) 类型有关。上面的变更集引用了account_type_UK.sql,它是:
INSERT INTO `account_type` (`id`, `version`, `is_default`, `name`) VALUES
(3, 0, b'1', 'Bonus'),
(4, 0, b'1', 'Demo');

上面的方法可以完美地正确地插入未指定上下文的数据。

另一个线索是,如果指定了上下文,则会得到缺少的方法异常,但不会创建架构。这可能意味着问题出在架构级别。使用通过dbm-gorm-diff生成的单个xml更改日志创建模式。

有任何想法吗?

最佳答案

看起来Grails调用的内容与您拥有的Liquibase版本之间存在版本不兼容的情况。 Grails正在寻找您正在使用的Liquibase版本上不存在的update()版本。您可以检查哪个Liquibase版本应该与Grails 2.5兼容吗?

关于grails - 如果指定任何上下文,则grails 2.5 dbm-update总是会因MissingMethodException失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31673828/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com