2009-12-04 114 views
9

我有一个红宝石web app,它使用lilypond根据用户输入生成乐谱。我想将主机移到heroku(我最近在一些项目上使用了heroku,并且非常喜欢它,加上我的流量足够低,它至少可以在heroku上免费托管它)。然而,heroku的动态架构不允许你ssh和安装任何你想要的软件包......相反,你给它一个宝石清单,它会为你安装宝石。因此,如果我要部署到heroku,我将需要将lilypond打包为宝石。我已经发布了一些纯ruby的宝石,但没有处理本地扩展或预编译的二进制文件,或类似的东西。打包宝石内预编译的二进制文件

是否有可能采取一些预编译的二进制文件并将其打包到一个gem中?理想情况下,这将包括OS X(我开发的)和debian linux(这是heroku上运行的)的二进制文件,并且在安装gem时安装适当的二进制文件。

回答

1

而是预编译的,你应该能够只列出宝石在你.gems文件,看到Heroku documentation。当然,这需要您的gem正确构建本机代码 - 这仍然是一项任务,但希望更容易。

1

我想你已经有了几个选择这里:

你可以得到LilyPond的source并将其打包成具有原生的C扩展的瑰宝。对于如何做到这一点的http://guides.rubygems.org/c-extensions/http://patshaughnessy.net/2011/10/31/dont-be-terrified-of-building-native-extensions

还有一个叫gitara宝石一些有用的指导,但我一直没能找到有关使用它在Heroku上的任何信息。可能值得给作者发电子邮件并询问他是否知道这件事。

您可以创建一个Heroku buildpack,作为部署的一部分安装Lilypond。我无法找到任何Lilypond,但有很多例子可以做类似的事情 - 例如,this one会安装Imagemagick(默认情况下它包含在Heroku中,所以可能不再需要 - 但希望代码有用) 。更多文档在https://devcenter.heroku.com/articles/buildpack-apihttps://devcenter.heroku.com/articles/buildpack-binaries

根据我的阅读,我认为 buildpack选项是最好的方法。

希望这有助于!