2016-05-06 94 views
0

我有一个Ruby脚本,由于最终用户没有全部所需的宝石,所以遇到了问题。我一直在研究这个问题,它似乎将它包装为宝石是确保它适用于任何人的最佳方式。如何分发需要的宝石的Ruby脚本

  1. 这是发布Ruby脚本的最佳方式,而不必担心最终用户在运行时没有gem吗?
  2. 如果我这样做,最终用户将如何运行脚本?现在他们正在使用ruby script_name执行它,我正在编写一个bash脚本来为它们自动运行它。
  3. 如果安装为gem,我还可以运行脚本吗?有一个双击文件来运行脚本对于需要使用它的人来说是天赐之物,他们并不像技术上倾向于那样。
+0

如果不是令人沮丧的话,获得一个干净的跨平台“可点击文件”可能会非常具有挑战性。你的目标是什么操作系统? – tadman

+0

我很确定我的目标是Mac OS X,但我越想越多,我认为我发送的这些人可能在Windows机器上。 –

+0

对于需要适应的每个操作系统版本,复杂度呈指数级增长。 Windows 7和Windows 10可以大不相同。这是什么样的应用程序,涉及多少代码?尽管我是Ruby的忠实粉丝,但您可能会发现另一种语言提供了更容易的交付选项,例如[NW.js](http://nwjs.io)会让您轻松跨平台移植。据我所知,Ruby不存在这样的事情。过去曾有过尝试,但都被抛弃了。 – tadman

回答

2

我假设您所需的宝石在Gemfile。如果你让他们运行一个bash脚本来运行你的Ruby脚本,你有没有考虑在运行你的Ruby脚本之前给脚本添加bundle install?这将在运行脚本之前安装所有必需的gem。

另一个选择是设置一个Docker容器,它已经安装了所有的gem,并且只是自动运行Ruby脚本。这会让你遇到用户使用错误版本的Ruby的问题,但是增加了他们安装Docker的成本。

+0

如果我添加'bundle install',我还必须将Gemfile与我发送的zip正确打包?这绝对是一种选择 - 虽然捆绑器本身不是宝石?这将需要他们安装一个宝石,这在理想情况下是我想避免的。我会试着看看Docker。 –

+0

是的,你必须打包你发送的'.zip'的'Gemfile',并且yes'bundler'本身就是一个宝石。你也可以把它添加到你的bash脚本中:'gem install bundler';) – erahm

+0

哈哈!这是我现在非常感兴趣的解决方案!我假设脚本将停止并等待bundler被安装,然后执行下一行? –