0

我正在向 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   

而且每次,它都会停在不同的线路和线路的不同位置。我已经尝试过使用各种构建包,并且似乎都以相同的方式工作。

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

4

2 回答 2

2

可以在您的机器上编译二进制文件,将其提交到 Heroku-only 存储库并推送它。这是我用来部署的脚本:

#!/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 部署脚本有一些增强。

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

于 2013-09-12T23:37:00.200 回答
1

写了一篇文章来解决这个问题,并为这种预编译部署编写了完整的分步说明。

于 2013-10-14T20:26:07.390 回答