Grails in Action第2版 - 生成脚手架时出错

时间:2015-10-27 14:16:20

标签: grails

我一直在努力使用Groovy Grails工具套件自学Grails。

GGTS 3.6.4 Grails 2.4.4 JDK 1.8.0_45

我在书中的P.92有2个问题:

  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]
    
  2. 我的猜测是问题是因为我没有将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
      
    2. 每一次,我都会收到预期的EOF"错误:

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

      这两个错误似乎并不相关,而不仅仅是跳过它,我真的很想了解发生了什么......

      任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

DataSource.groovy将文件发送到'update'而不是'create-drop',并将数据库从内存中删除。

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

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

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

对于连接的实际应用程序,可以说是MySQL。此设置等同于您,然后手动更新数据库并创建您在开发中设计的任何新表。

DataSource.groovy文件到'create-drop'正如名称所示,它将创建新表和删除条目,因此在开发环境甚至其他一些环境(如测试)的情况下,您可能会很乐意将它留在create-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,因为它提供了你可以看到/编辑和学习的东西。

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