Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何处理Rails中的非gem依赖关系_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何处理Rails中的非gem依赖关系

Ruby on rails 如何处理Rails中的非gem依赖关系,ruby-on-rails,Ruby On Rails,我有一个可能是愚蠢的问题。如果是,对不起 我最近参与了一个Rails项目,该项目需要PhantomJS才能正常运行其Cumber场景。不幸的是,该应用程序没有说它依赖于PhantomJS,所以当场景失败时,它看起来就像是坏了一样,而且还不清楚为什么 停止错误的唯一方法是执行brew安装phantomjs。显然,这不是一个gem,安装PhantomJS gem也没有任何作用 在Rails项目中处理非gem依赖关系的正确方法是什么?我认为没有标准方法 PhantomJS是一个独立的应用程序,因此需要

我有一个可能是愚蠢的问题。如果是,对不起

我最近参与了一个Rails项目,该项目需要PhantomJS才能正常运行其Cumber场景。不幸的是,该应用程序没有说它依赖于PhantomJS,所以当场景失败时,它看起来就像是坏了一样,而且还不清楚为什么

停止错误的唯一方法是执行
brew安装phantomjs
。显然,这不是一个gem,安装PhantomJS gem也没有任何作用


在Rails项目中处理非gem依赖关系的正确方法是什么?

我认为没有标准方法

PhantomJS是一个独立的应用程序,因此需要安装。如果应用程序依赖于redis或postgreSQL,则这与安装redis或postgreSQL相同


不过,您使用自制软件进行安装是正确的,这使更新和删除更容易。

这不是一件小事。顺便说一句,除了gems/rubies之外,没有内置的实用程序来声明对其他事物的依赖性。Ruby是一种解释语言,因此可以在多种环境下运行;在这个级别上管理依赖关系将是一项相当复杂的任务

许多人使用部署工具来处理这一问题,比如或确保运行应用程序的环境足够,并在需要时安装所需的依赖项。通常,您会创建一个rake任务来完成此任务,然后通过capistrano调用它,或者让用户手动调用它

如果您想向人们警告依赖项,可以选择使用初始值设定项在应用程序启动时检查环境中是否安装了所需的依赖项,如果没有安装,则发出警告(或完全关闭应用程序)

另一个选项是将依赖项检查作为一系列测试来执行。因此,如果这些测试失败,您可以提供关于缺失内容的详细说明


总之,您至少可以在文档中列出环境依赖项。请确保这是您的主文档文件的顶部。

我接受了这个答案,尽管并非毫无遗憾。:)顺便说一句,这就是我的观点:啊,但最后一段-
十二要素应用程序也不依赖任何系统工具的隐含存在。
,使用了ImageMagick的一个例子,MyX的答案很好,我总是推荐使用像厨师或木偶这样的服务器配置系统。不是rails的一部分,但这是一个很好的方法,可以让你确信一切都在它应该在的地方。是的,他们说你不应该依赖任何系统工具,比如ImageMagick或PhantomJS。同一段的最后一句话:“如果应用程序需要向系统工具出售,那么该工具应该在应用程序中出售。”我的问题是如何在应用程序中出售PhantomJS。有些gem可能提供外部工具的二进制文件,甚至具有必须在安装时编译的本机C扩展。我不太喜欢这个解决方案,因为它几乎总是假设你的应用程序将在*nix环境下运行,而且它不会使用标准过程来安装软件包(例如不会使用apt-get)。回答不错,建议也不错。我已经选择了另一个答案,但我投了更高的票。我在其他框架(Symfony)中见过依赖性检查,所以也许我会复制这个想法。