2013-03-27 89 views
1

我有什么可能是一个愚蠢的问题。如果是,对不起。如何处理Rails中的非宝石依赖关系

我最近接受了一个Rails项目,需要PhantomJS才能使其黄瓜方案正常运行。不幸的是,该应用程序并没有说它取决于PhantomJS,所以当情景失败时,它看起来像事情被打破了,并且它不是很清楚为什么。

使错误停止的唯一方法是做brew install phantomjs。显然,这不是一个宝石,安装PhantomJS宝石也没有做任何事情。

在Rails项目中处理非宝石依赖的正确方法是什么?

回答

1

我不相信有一个标准的方法。

PhantomJS是一个独立的应用程序,需要像这样安装。如果您的应用程序依赖于它,它将与安装redis或postgreSQL相同。

虽然你是正确的安装使用自制软件,使更新删除更容易。

+0

我接受了这个答案,虽然不是没有悲伤。 :)顺便说一句,这是我从这里来的地方:http://www.12factor.net/dependencies – 2013-03-27 19:17:16

+0

啊,但最后一段 - “十二个因素的应用程序也不依赖于隐含的存在任何系统工具.',使用ImageMagick的一个例子,我将它与PhantomJS相提并论:) – 2013-03-27 20:05:44

+0

m_x的回答很好 - 我总是推荐使用像厨师或木偶这样的服务器配置系统。没有明确指出轨道的一部分,但是有一个很好的方法可以确信一切都在它应该在的地方。 – 2013-03-27 20:08:57

1

这不是一件小事。 AFAIK,没有内置的实用程序来声明除gem/rubies之外的其他内容的依赖关系。 Ruby是一种解释型语言,因此可以运行在各种环境中;管理这个级别的依赖将是一项相当复杂的任务。

很多人处理这个使用部署工具capistranopuppet,以确保环境中运行的应用程序是足够的,并安装所需的依赖关系如果需要的话。通常,您将创建一个rake任务来完成此操作,并通过capistrano呼叫,或者让用户手动调用它。

如果你想警告依赖的人,一个选择是使用初始化来检查应用程序的启动是必需的依赖安装在环境,并发出警告(或完全关闭应用程序)如果不。

另一种选择将简单地将执行依赖性检查作为一系列测试。因此,如果这些测试失败,您可以提供有关缺少的详细说明。

总而言之,你至少可以做的只是列表环境依赖关系在你的文档。确保它位于主文档文件的顶部。

+0

很好的答案,以及很好的建议。我已经选择了其他的答案,但我upvoted。我在其他框架(Symfony)中看到了依赖检查,所以也许我会复制这个想法。 – 2013-03-27 19:27:23