部署到Heroku时超时

时间:2013-09-12 23:07:12

标签: haskell heroku

我正在推动一个Haskell Web应用程序,该应用程序具有相当多的依赖性,这需要heroku下载并编译所有依赖项。

事情似乎在一段时间之后突然在日志中“停止”。日志突然停在中线,每次都在一个稍微不同的位置

看了heroku logs后,接收和消息之间的时间似乎开始编译,编译结束之间的时间总是 15分钟(加上几秒钟)。 buildpack运行正常,我过去曾将它用于应用程序。如果我从依赖项中删除所有必需的包,它会尝试编译我的Web应用程序,它的行为与在本地计算机上完全相同(它在抱怨缺少依赖项后停止)。我已经用几乎所有必需的软件包逐个完成了这个...但是当我把它们放在一起时,它会以同样的方式失败。

以下是日志的示例:

... (lots of similar lines, nothing out of the ordinary) ...

Downloading feed-0.3.9.1...                             
Downloading texmath-0.6.4...                            
Configuring resource-pool-0.2.1.1...                    
Building tagsoup-0.12.8...                              
Building resource-pool-0.2.1.1...                       
Installed hexpat-0.20.3                                 
Configuring case-insensitive-1.1...                     
Building case-insensitive-1.1...                        
Configuring void-0.6.1...                               
Installed resource-pool-0.2.1.1                         
Configuring unordered-containers-0.2.3.2...             
Installed case-insensitive-1.1                          
Downloading http-types-0.8.1...                         
Building void-0.6.1...                                  
Building unordered-containers-0.2.3.2...                
Building lifted-base-0.2.1.0...                         
Confi                                                   
 !     Push rejected, failed to compile Multipack app   

每次,它停在不同的线和线上的不同位置。我已经尝试了各种buildpacks,它似乎都以同样的方式工作。

所有迹象似乎都指向超时错误......最有罪的是所有失败的尝试都是15分钟......或者可能是磁盘空间错误。有谁知道是否有办法增加超时或加快编译?我可以预先编译所有的二进制文件吗?

2 个答案:

答案 0 :(得分:2)

可以在您的机器上编译二进制文件,将其提交到仅限Heroku的存储库并推送它。部署Here is a script I used

#!/bin/sh -e

cabal configure
cabal build
cd heroku # this is my Heroku-only repository
git rm -r *
cp ../dist/build/labyrinth-server/labyrinth-server .
cp -r ../public/ . # this is the static files directory
echo "web: ./labyrinth-server" > Procfile
touch requirements.txt # pretend to be a Python app, otherwise Heroku doesn't know what to do
git add *
git commit -m "New version."
git push
cd - >/dev/null

注意:我稍后切换到OpenShift,OpenShift deploy script有一些增强功能。

另一个注意事项:您应该确保在具有兼容架构的计算机上构建并链接到现有的libc版本。如果您手动SSH到服务器(rhc sshheroku run bash),您可以自己检查所有这些。对于当前的OpenShift,Debian Wheezy x64机器可以生成兼容的二进制文件。

答案 1 :(得分:1)