【问题标题】:Grails in Action 2nd Edition - Error Generating ScaffoldGrails in Action 第 2 版 - 生成脚手架时出错
【发布时间】:2015-10-27 14:16:20
【问题描述】:

我一直在煞费苦心地尝试使用 Groovy Grails 工具套件自学 Grails。

GGTS 3.6.4 圣杯 2.4.4 JDK 1.8.0_45

我在书中的第 92 页有两个问题:

  1. 运行 Grails 控制台时,我收到以下错误:

    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table post drop constraint FK_kpfnivid38f5bwx3yl1lxeeae if exists
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "POST" not found; SQL statement:
    alter table post drop constraint FK_kpfnivid38f5bwx3yl1lxeeae if exists [42102-176]
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table post_tags drop constraint FK_rf0kr7eqk5xoalmc4gigdwg3p if exists
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "POST_TAGS" not found; SQL statement:
    alter table post_tags drop constraint FK_rf0kr7eqk5xoalmc4gigdwg3p if exists [42102-176]
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table post_tags drop constraint FK_n8k2owli9ecanh4phj01mddvv if exists
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "POST_TAGS" not found; SQL statement:
    alter table post_tags drop constraint FK_n8k2owli9ecanh4phj01mddvv if exists [42102-176]
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table profile drop constraint FK_c1dkiawnlj6uoe6fnlwd6j83j if exists
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "PROFILE" not found; SQL statement:
    alter table profile drop constraint FK_c1dkiawnlj6uoe6fnlwd6j83j if exists [42102-176]
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table tag drop constraint FK_151ooxskkpn49blwsh7mjwysx if exists
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "TAG" not found; SQL statement:
    alter table tag drop constraint FK_151ooxskkpn49blwsh7mjwysx if exists [42102-176]
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table user_user drop constraint FK_s7pwk9swjfqs0w7ub9tt5s47y if exists
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "USER_USER" not found; SQL statement:
    alter table user_user drop constraint FK_s7pwk9swjfqs0w7ub9tt5s47y if exists [42102-176]
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table user_user drop constraint FK_1hl85r166108l1vgkxycm3cq0 if exists
    Error |
    2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "USER_USER" not found; SQL statement:
    alter table user_user drop constraint FK_1hl85r166108l1vgkxycm3cq0 if exists [42102-176]
    

我的猜测是问题是因为我没有将我的DataSource.groovy 文件更改为'update' 而不是'create-drop' 并导致数据库内存不足。

我没有测试这个理论,因为 Grails 控制台仍在运行,这导致了我的第二个错误。

  1. 我们被告知使用以下命令生成 4 个控制器:

    create-scaffold-controller com.grailsinaction.User
    create-scaffold-controller com.grailsinaction.Profile
    create-scaffold-controller com.grailsinaction.Post
    create-scaffold-controller com.grailsinaction.Tag
    

每次,我都会收到“预期 EOF”错误:

1 compilation error:

expecting EOF, found 'com' at line: 1, column: 28

这两个错误似乎无关,与其跳过它,我真的很想了解发生了什么......

任何帮助将不胜感激。

【问题讨论】:

  • 抱歉,'gobblygook' 的段落很长。我还是新手,不知道如何正确格式化...

标签: grails


【解决方案1】:

DataSource.groovy 文件到'update' 而不是'create-drop' 并使数据库内存不足。

这是假设您已将数据源配置为连接到真实数据库。

我可以看到 hbm2ddl 是上面的日志,对于您的内部内存数据库,它确实应该是 'create-drop'

DataSource.groovy 文件到'update' 告诉您的应用程序只更新现有表,这不会创建任何新表。

对于连接到 MySQL 的真实应用程序。此设置等同于您随后还手动更新数据库并创建您在开发中设计的任何新表。

DataSource.groovy 文件到'create-drop' 顾名思义,它将创建新表并删除条目,因此在开发环境甚至一些其他环境(例如测试)的情况下,您可能很乐意将其留在创建-drop 并让 grails 生成表。

唯一需要注意的一件事是,如果您假设您有一些具有

的域类
Boolean isValid

static constraints { 
 isValid(nullable:false)
}

如果您稍后决定在 MySQL 示例的情况下实际上它应该是可空的,那么您必须登录它并手动调整它,因为它已经创建了。对于内联内存(您的示例),谁关心下一个 run-app = fresh db 。

关于: create-scaffold-controller

这是一个新的,http://grails.github.io/grails-doc/2.4.4/ref/Command%20Line/create-scaffold-controller.html 看起来正确,你正在执行什么。

但是,如果我理解正确(我还没有开始深入研究该命令的作用),尝试简化或扩展视野,但肯定离手动执行这样的事情不远了。

grails create-controller com.grailsinaction.User

然后去用户类做:

class UserController {
  static scaffold = true   
}

为每一个保存重复,然后继续阅读文档..

在此处了解有关脚手架概念的更多信息:

http://grails.asia/grails-tutorial-for-beginners-scaffolding/

http://tutorials.techmytalk.com/2014/07/19/grails-scaffolding-controllers-and-views/

另外,如果您使用 ggts,请使用鼠标右键选择域类,我认为 grails 会生成控制器和视图

这将是脚手架的替代方案,它是脚手架动态为您提供的,然后生成供您使用和编辑。这是进入 grails 的好方法,因为它为您提供了可以查看/编辑和学习的东西。

脚手架只是隐藏了所有这些,并且是隐藏生成的东西的整洁方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2017-07-29
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多