我有一个红宝石web app,它使用lilypond根据用户输入生成乐谱。我想将托管移动到heroku(我最近在一些项目中使用了heroku并且非常喜欢它,而且我的流量足够低,以至于它可以在heroku上免费托管它一段时间至少)。然而,heroku的dyno架构不允许你输入并安装你想要的任何软件包......相反,你给它一个宝石清单,它会为你安装宝石。
所以,如果我要部署到heroku,我将需要将lilypond打包成宝石。我已经发布了一些纯红宝石,但没有处理原生扩展或预编译的二进制文件,或类似的东西。
是否可以使用一些预编译的二进制文件并将其打包到gem中?理想情况下,这将包括OS X(我开发的)和debian linux(这是在heroku上运行的)的二进制文件,并且会在安装gem时安装适当的二进制文件。
答案 0 :(得分:3)
这是可能的,因为Windows的预编译二进制宝石是常态。或许,看看rake编译器。 http://wiki.github.com/rdp/ruby_tutorials_core/gem也可以提供帮助 -r
答案 1 :(得分:1)
您应该只能在.gems
文件中列出gem,而不是预编译,请参阅Heroku documentation。当然,这需要你的gem正确构建本机代码 - 这仍然是一项任务,但希望更容易。
答案 2 :(得分:1)
我想你在这里有几个选择:
你可以获得Lilypond source并将其打包成具有原生C扩展名的gem。有关如何在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-api和https://devcenter.heroku.com/articles/buildpack-binaries
根据我的阅读,我认为 buildpack选项是最佳方式。
希望这有帮助!