Heroku/Rails: 如何在Heroku上安装GNU Scientific Library(GSL)?

5

我需要在Heroku运行的Rails(4.0.2)应用程序上安装GSL库,以便使用一些依赖于它的宝石。

目标: 在Heroku上安装GSL库,以便与GSLSimilarity宝石一起使用。

尝试的方法:

我尝试按照这些步骤(编译二进制文件)进行操作:

这在我的本地环境中工作正常,但在Heroku中不起作用。Heroku不允许使用sudo,但允许使用heroku run进行访问。问题在于文件系统是短暂的,dyno仅在控制台会话持续期间存在。

更新:

我也尝试构建自己的Heroku Buildpack,但无法使其工作。我尝试使用multipacks。我不是Heroku Buildpack专家,所以可能是问题,我正在学习更多关于它的知识,以便创建一个简单的存储库,其中包含一个示例和有关此问题的扩展说明。

3个回答

2

我需要在Heroku上使用gsl1.16,以下是我的解决方法:

首先将gsl1.16 buildpack添加到构建包列表中,如下所示:

heroku buildpacks:add --index:3 git://github.com/gregory/heroku-gsl-buildpack.git#gsl-1.16

我已经有了nodejs和ruby,现在需要添加另一个构建包。因此使用--index=3

然后需要在Heroku上设置LD_LIBRARY_PATH:

heroku config:set LD_LIBRARY_PATH=/app/vendor/gsl/lib

这指的是1.16版本。我看到有些人使用/app/vendor/gsl1/lib,但这不适用于我的情况。

就是这样。


1
你需要使用一个自定义构建包。构建包允许你定义任何项目之外的额外依赖项,并将它们与dynos使用的slug一起打包。你链接的构建包(https://github.com/tomwolfe/heroku-buildpack-gsl-ruby)是使所有东西正常工作的最佳选择。如果你遇到问题,我建议在他们的github仓库上开issue,希望他们能帮助你。

谢谢你,丹。实际上我对Heroku Buildpacks还是新手,所以我会先自己尝试(学习),然后通知你。 - skozz
嗨,丹,我现在知道它是如何工作的(Buildpacks),但我该如何在我的(已开始的)当前项目中实施它?谢谢! - skozz
你可能可以切换构建包,但最好的方法可能是使用Heroku创建一个新应用程序并销毁旧应用程序。看起来如果你设置了 BUILDPACK_URL ,Heroku 将使用它:https://devcenter.heroku.com/articles/buildpacks#using-a-custom-buildpack - Dan McClain
是的!添加BUILDPACK_URL可以用于部署/安装:heroku config:set BUILDPACK_URL=https://github.com/skozz/heroku-buildpack-gsl-ruby.git --app <<myapp>>(我分叉了它以更改GSL版本为1.14)。现在问题是部署后:/app/vendor/bundle/ruby/2.0.0/gems/gsl-1.15.3/lib/gsl.rb:2:in require': libgsl.so.0: cannot open shared object file: No such file or directory - /app/vendor/bundle/ruby/2.0.0/gems/gsl-1.15.3/lib/rb_gsl.so (LoadError)`找不到库。 - skozz
@skozz 你最终解决了这个问题吗? - Sixty4Bit
@Sixty4Bit 我正在开发自己的 Buildpack,支持更新的 GSL。 - skozz

1
我几个月前为1.15和1.16创建了一个Heroku Buildpack。
只需执行以下操作:
``` heroku buildpacks:set git://github.com/gregory/heroku-gsl-buildpack.git#gsl-1.16 ```
或者
``` heroku buildpacks:set git://github.com/gregory/heroku-gsl-buildpack.git#gsl-1.15 ```

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