无法将Play应用部署到Heroku

4

我在将Play应用程序部署到Heroku时遇到了问题。我已经成功地部署了其他没有模块的基本应用程序,但是这个应用程序给了我以下错误:

@ubuntu:~/$ git push heroku master
Counting objects: 812, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (699/699), done.
Writing objects: 100% (794/794), 2.00 MiB, done.
Total 794 (delta 145), reused 0 (delta 0)

-----> Heroku receiving push
-----> Play! app detected
-----> Installing ivysettings.xml..... done
-----> Building Play! application...
       ~        _            _ 
       ~  _ __ | | __ _ _  _| |
       ~ | '_ \| |/ _' | || |_|
       ~ |  __/|_|\____|\__ (_)
       ~ |_|            |__/   
       ~
       ~ play! 1.2.3, http://www.playframework.org
       ~
       1.2.3
       Play! application root found at ./mods/playcopy/crud-1.2.3/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/use-gs-in-tags/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/demo/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/inline-dependency-declaring/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/jquery-ui/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/booking/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/less-and-coffee/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/chat/
./mods/playcopy/greenscript-1.2.6h/
./
       Resolving dependencies: .play/play dependencies ./mods/playcopy/crud-1.2.3/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/use-gs-in-tags/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/demo/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/inline-dependency-declaring/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/jquery-ui/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/booking/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/less-and-coffee/
./mods/playcopy/greenscript-1.2.6h/samples-and-tests/chat/
./mods/playcopy/greenscript-1.2.6h/
./ --forceCopy --silent -Duser.home=/tmp/build_1hn7e8ahaqrso 2>&1
       ~ Resolving dependencies using /tmp/build_1hn7e8ahaqrso/mods/playcopy/crud-1.2.3/conf/dependencies.yml,
       ~
       ~
       ~ No dependencies to install
           ~
       ~ Done!
       ~
       ~        _            _ 
       ~  _ __ | | __ _ _  _| |
       ~ | '_ \| |/ _' | || |_|
       ~ |  __/|_|\____|\__ (_)
       ~ |_|            |__/   
       ~
       ~ play! 1.2.3, http://www.playframework.org
       ~
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 64: ./mods/playcopy/greenscript-1.2.6h/samples-and-tests/use-gs-in-tags/: is a directory
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 65: ./mods/playcopy/greenscript-1.2.6h/samples-and-tests/demo/: is a directory
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 66: ./mods/playcopy/greenscript-1.2.6h/samples-and-tests/inline-dependency-declaring/: is a directory
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 67: ./mods/playcopy/greenscript-1.2.6h/samples-and-tests/jquery-ui/: is a directory
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 68: ./mods/playcopy/greenscript-1.2.6h/samples-and-tests/booking/: is a directory
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 69: ./mods/playcopy/greenscript-1.2.6h/samples-and-tests/less-and-coffee/: is a directory
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 70: ./mods/playcopy/greenscript-1.2.6h/samples-and-tests/chat/: is a directory
/app/slug-compiler/lib/../language_packs/play/bin/compile: line 71: ./mods/playcopy/greenscript-1.2.6h/: is a directory
       /app/slug-compiler/lib/../language_packs/play/bin/compile: line 72: ./: is a directory
 !     Failed to build Play! application
 !     Cleared Play! framework from cache
/app/slug-compiler/lib/language_pack.rb:35:in `block in compile': failed to compile Play! app (Slug::CompileError)
    from /app/slug-compiler/lib/language_pack.rb:32:in `fork'
    from /app/slug-compiler/lib/language_pack.rb:32:in `compile'
    from /app/slug-compiler/lib/slug.rb:490:in `block in run_language_pack'
    from /app/slug-compiler/lib/utils.rb:117:in `log'
    from /app/slug-compiler/lib/slug.rb:727:in `log'
    from /app/slug-compiler/lib/slug.rb:489:in `run_language_pack'
    from /app/slug-compiler/lib/slug.rb:110:in `block (2 levels) in compile'
    from /app/slug-compiler/lib/utils.rb:98:in `block in timeout'
    from /usr/local/lib/ruby/1.9.1/timeout.rb:57:in `timeout'
    from /app/slug-compiler/lib/utils.rb:98:in `rescue in timeout'
    from /app/slug-compiler/lib/utils.rb:93:in `timeout'
    from /app/slug-compiler/lib/slug.rb:99:in `block in compile'
    from /app/slug-compiler/lib/utils.rb:117:in `log'
    from /app/slug-compiler/lib/slug.rb:727:in `log'
    from /app/slug-compiler/lib/slug.rb:98:in `compile'
    from /app/slug-compiler/bin/slugc:85:in `block in <main>'
    from /app/slug-compiler/lib/slug.rb:498:in `block in lock'
    from /app/slug-compiler/lib/repo_lock.rb:44:in `call'
    from /app/slug-compiler/lib/repo_lock.rb:44:in `run'
    from /app/slug-compiler/lib/slug.rb:498:in `lock'
    from /app/slug-compiler/bin/slugc:66:in `<main>'
-----> Discovering process types
       Procfile declares types -> web
-----> Compiled slug size is 36.4MB
-----> Launching... done, v6
       http://billeteo.herokuapp.com deployed to Heroku

To git@heroku.com:billeteo.git
   53b789c..24f66a4  master -> master

尽管我是从项目的根目录运行的,但Heroku认为我的根目录在以下位置:
 Play! application root found at ./mods/playcopy/crud-1.2.3/

当然,它并不包含代码,因此进程失败。

我的应用程序是标准的Play应用程序,具有以下依赖项.xml:

# Application dependencies
# Notes:
#   play is an alias for play -> play $currentVersion
#   play -> crud is an alias for play -> crud $currentVersion
#   play -> secure is an alias for play -> secure $currentVersion
#   Modules from the main repository use 'play' as organisation

require:
    - play
    - playcopy -> crud 1.2.3
    - playcopy -> betterlogs 1.0
    - playcopy -> cobertura 2.1
    - playcopy -> mockito 0.1
    - playcopy -> greenscript 1.2.6h
    - custom -> useragentcheck 1.0
    - org.hibernate -> hibernate-search 3.4.0.Final

repositories:
     - localModules:
         type:       local
         artifact:   "${application.path}/mods/[organisation]/[module]-[revision]"
         contains:
           - playcopy
           - custom

我正在使用本地仓库来存储一些官方Play模块,因为它们可能包含一些定制代码(删除一些不必要的类,更改安全性,一些日志等)。

有人知道如何让Heroku找到正确的根目录吗?在谷歌上查找了一番后没有找到任何信息...

1个回答

4

Heroku上的Play设置没有考虑到你的特定设置。就像你所指出的那样,它对你应用程序的根目录位置感到困惑。我认为我们可以推送一个修复程序来解决这个问题,但在此期间,你应该能够解决它。请尝试以下操作:

压缩你的自定义模块并更改你的dependencies.yml文件为

...
repositories:
 - localModules:
     type:       local
     artifact:   "${application.path}/mods/[organisation]/[module]-[revision].zip"
     contains:
       - playcopy
       - custom
...

在依赖项解析期间,Play应该解压您的自定义模块并将其放在正确的位置。此外,Heroku不应混淆您的应用程序根目录所在的位置。

谢谢你的回答。现在我又遇到了另一个错误:20:55:58,442 错误 ~ 缺少预编译类!!有什么想法吗?顺便说一下,Heroku通过检查SO并在这里回答而得到了++love ;) - Pere Villega
很难确切地知道预编译正在发生什么。你能否向Heroku提交一个工单,这样我就可以查看你的应用程序?我们一定会将任何发现重新发布到SO :) - timkral
实际上,在您记录工单之前,您可以尝试运行编译,就像Heroku一样。 真的没有什么魔法。 - timkral
糟糕,按下回车太快了。请查看此帖子以了解如何重现Heroku编译:http://stackoverflow.com/questions/7560628/play-cant-read-heroku-config-vars-when-parsing-application-conf - timkral

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接