1

コンテキスト: https://github.com/fusspawn/tserver/blob/master/app/controllers/gorp.go

gorm セットアップを取得しようとする一環として、標準の revel/gorp の例を変換しようとしました。

でも。Begin()、Commit()、Rollback() メソッドが定義されていても、パニックを引き起こすには十分です。

   TRACE 2015/09/06 17:37:47 harness.go:126: Rebuild                                                                                                  
   INFO  2015/09/06 17:37:47 build.go:172: Cleaning dir tmp                                                                                           
   INFO  2015/09/06 17:37:47 build.go:172: Cleaning dir routes                                                                                        
   INFO  2015/09/06 17:37:47 build.go:172: Cleaning dir tmp                                                                                           
   INFO  2015/09/06 17:37:47 build.go:172: Cleaning dir routes                                                                                        
   TRACE 2015/09/06 17:37:47 build.go:151: Exec: [/usr/bin/git --git-   dir=/home/fusspawn/go/src/github.com/fusspawn/tserver/.git describe --always --   dirty]                                                                                                                                               
   TRACE 2015/09/06 17:37:47 build.go:94: Exec: [/usr/bin/go build -ldflags    -X github.com/fusspawn/tserver/app.APP_VERSION "git-2588ef1" -tags  -o /ho
  me/fusspawn/go/bin/revel.d/github.com/fusspawn/tserver/tserver   github.com/fusspawn/tserver/app/tmp]                                                
   TRACE 2015/09/06 17:39:14 app.go:56: Exec app:   /home/fusspawn/go/bin/revel.d/github.com/fusspawn/tserver/tserver    [/home/fusspawn/go/bin/revel.d/git
   hub.com/fusspawn/tserver/tserver -port=46276 -  importPath=github.com/fusspawn/tserver -runMode=dev]                                                 
   INFO  2015/09/06 17:39:14 revel.go:329: Loaded module static                                                                                       
   INFO  2015/09/06 17:39:14 revel.go:329: Loaded module testrunner                                                                                   
   INFO  2015/09/06 17:39:14 revel.go:206: Initialized Revel v0.12.0 (2015-03-25) for >= go1.3                                                        
   INFO  2015/09/06 17:39:14 main.go:30: Running revel server                                                                                         
   TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller: App                                                                            
   panic: reflect: call of reflect.Value.Type on zero Value                                                                                           

   goroutine 1 [running]:                                                                                                                             
   runtime.panic(0x88cec0, 0xc21011b7a0)                                                                                                              
    /usr/lib/go/src/pkg/runtime/panic.c:266 +0xb6                                                                                              
   reflect.Value.Type(0x0, 0x0, 0x0, 0x0, 0x0)                                                                                                        
    /usr/lib/go/src/pkg/reflect/value.go:1698 +0x79                                                                                            
    github.com/revel/revel.findControllers(0x7f365698bea8, 0x9186e0, 0x0, 0x0, 0x0)                                                                    
    /home/fusspawn/go/src/github.com/revel/revel/controller.go:321 +0x25a                                                                      
    github.com/revel/revel.RegisterController(0x9172a0, 0x0, 0xc2100c4bf0,    0x2, 0x2)                                                                   
     /home/fusspawn/go/src/github.com/revel/revel/controller.go:400 +0x1f3                                                                      
    main.main()                                                                                                                                        
     /home/fusspawn/go/src/github.com/fusspawn/tserver/app/tmp/main.go:150  +0x141b                                                              
     TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller:     GormController                                                                 
     TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller: Static                                                                         
     TRACE 2015/09/06 17:39:14 controller.go:402: Registered controller:  TestRunner             

メソッド定義をコメントアウトすると、パニックが停止します。これらのメソッドを呼び出さないと (revel.InterceptMethod 呼び出しがコメントアウトされていることに注意してください)、パニックが発生する可能性があることを理解できないようです:/

4

1 に答える 1

2

Revel のドキュメントによると、システムはソース ディレクトリをスキャンして、*Revel.Controller. あなたが見ているエラーは、Revel が動的リフレクションを実行し、このコントローラー スキャンの初期化中に失敗したことが原因です。問題は、コントローラのスキャンで問題が発生するのはなぜですか?

あなたのコードはEventStreamのコントローラーを拡張しようとしているように見えますが、これは Revel デバッグ コントローラー検出コードがコントローラーとして読み取ろうとします。ただし、現状のコードは現在、 a の*GormController代わりに a を埋め込むことにより、フレームワークの期待に違反していGormControllerます。コントローラーのドキュメントの最後の部分を参照してください。

このため、コントローラーの検出ロジックが単に窒息していると思います。EventStream構造定義を修正してください。

これで問題が解決する場合は、おそらく Revel 関係者にバグ レポートを送信する必要があります。返されるエラー メッセージは非常に悪く、ローカルではないためです。問題の名前が言及されていないためです。失敗したときにコントローラーとして登録しようとしています。

于 2015-09-06T21:23:16.130 に答える