2013-05-30 20 views
3

以下是情况。我在一个大的Rails 3.2.13应用程序(Ruby 1.9.3,Bundler 1.3.5)上工作。我们最近开始通过将某些组件分解为宝石/引擎来使这款应用程序不那么庞大。但是,我们已将源代码保存在同一个git存储库中。因此,我们有一个像文件结构:管理Gemfile.lock与来自同一存储库的gem捆绑在一起

APPNAME 
|-app 
|-gems 
|---engine1 
|---engine2 
|-lib 

随后的Gemfile看起来像:

gem 'engine1', :path => File.expand_path('../gems/engine1', __FILE__) 
gem 'engine2', :path => File.expand_path('../gems/engine1', __FILE__) 

到目前为止好。我的问题是Gemfile.lock在开发者之间不再一致。每当我从获取源代码控制的变化和运行rspecrails server或什么的,我得到了修改Gemfile.lock,其中DIFF样子:

PATH 
- remote: /Users/OTHER_DEVELOPER/PATH_TO_APP_SOURCE/gems/engine1 
+ remote: /Users/ME/APPNAME/gems/engine1 

我们一直遵循我们认为是检查我们的Gemfile.lock的最佳实践进入源代码控制,但现在这是造成git头痛。有没有人处理过这个问题?任何解决方案的想法?

+0

尽管这是一种很好的做法,但如果它不适合你,你总是可以选择忽略来自git的'.lock'文件。 – Kashyap

+0

FWIW,当你开始将应用程序重构成引擎时,你会开发一个gem :) – Kashyap

回答

1

这里的问题是,你以无意的方式使用宝石。他们是宝石,而不是DLL。

如果您需要宝石方法,请将其托管在专用服务器上,并在您的GEMFILE中引用该服务器。

如果你想在ruby中使用类似DLL的方法,只需为每个库使用一个文件夹即可。

+0

我明白这不是意图。但是我们目前看不到将宝石打包在单独存储库中的优势。我们正在尝试一段时间,但随着版本的颠簸,每当您进行更改时,都会造成自己的麻烦。 我们在这里不仅仅是代码组织。我们希望能够有条件地加载一些引擎,而不是某些服务器上的其他引擎。 +1但不接受这个答案(尽管可能没有更好的答案)。 – gregates

+0

版本碰撞不情愿是进一步的说法,说你不需要宝石。你只需要'require'机制。也许你可以随时加载包含库的文件夹。 –