2

我有以下设置:

一个 rails 4.0.0 应用程序 => 我的主应用程序

通过这个应用程序开发人员可以创建宝石骨架

现在我想创建 gem 骨架源代码并通过 rails master 应用程序中的调用运行 gem Gemfile 的 bundle install :

class MyClass

  # this works
  def create_gem_skeleton
    path = "path-to-gem-skeleton-outside-the-rails-master-app"
    FileUtils.mkdir_p(path)
    `cd #{path} && bundle gem my-new-gem`
  end

  # this method gets called, after I created the gem skeleton and manipulated it a bit with my preferences
  def my_method
    path = "path-to-gem-skeleton-outside-the-rails-master-app"
    exec `cd #{path} && bundle install`   # does not work, installs always the rails master bundle inside my rails master application, never touches the new gem-skeleton
    system `cd #{path} && bundle install` # =||= .. same here
    `cd #{path} && bundle install`        # =||= .. same here

  end

end

任何人都知道如何在我的 rails master 应用程序中运行这样的“bundle install”调用,将 bundle 安装在新的 gem-skeleton 中而不接触 rails bundle?

我使用 rails 4.0.0 和 ruby​​ 2.0.0-p195

谢谢!

4

3 回答 3

8

您应该将反引号调用包装在传递给Bundler.with_clean_env. 这将确保它不会获取您应用的 Gemfile:

Bundler.with_clean_env { `cd #{path} && bundle install` }

有关详细信息,请参见bundle-exec手册页

于 2013-08-01T11:21:23.460 回答
0

我认为您必须触摸您的主捆绑包,至少要包含您的宝石。当您捆绑您的主应用程序时,所有 gem 依赖项都已安装并锁定到您的主 Gemfile.lock 以进行依赖项解析。

于 2013-08-01T08:55:21.497 回答
0

创建具有依赖关系的 gem 对您来说是一个很好的解决方案吗?

它自己的 gem 不会包含任何特定的代码,但是每次你需要一个新的依赖项时,你只需要修改它gemspec,并且在其他应用程序上简单地运行bundle update会更新你的 gem 并安装它的新依赖项。

于 2013-08-01T01:18:47.577 回答