Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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 如何在gem文件中指定本地gem?_Ruby On Rails_Ruby_Ruby On Rails 3_Rubygems_Bundler - Fatal编程技术网

Ruby on rails 如何在gem文件中指定本地gem?

Ruby on rails 如何在gem文件中指定本地gem?,ruby-on-rails,ruby,ruby-on-rails-3,rubygems,bundler,Ruby On Rails,Ruby,Ruby On Rails 3,Rubygems,Bundler,我想Bundler加载一个本地gem。有这样的选择吗?或者我必须将gem文件夹移动到.bundle目录中吗?我相信您可以这样做: gem "foo", path: "/path/to/foo" 除了指定路径(如Jimmy所述),您还可以仅通过使用以下配置选项强制Bundler为您的环境使用本地gem: $ bundle config local.GEM_NAME /path/to/local/git/repository 如果您同时开发两个gem或一个gem和一个rails应用程序,这将非常

我想Bundler加载一个本地gem。有这样的选择吗?或者我必须将gem文件夹移动到.bundle目录中吗?

我相信您可以这样做:

gem "foo", path: "/path/to/foo"

除了指定路径(如Jimmy所述),您还可以仅通过使用以下配置选项强制Bundler为您的环境使用本地gem:

$ bundle config local.GEM_NAME /path/to/local/git/repository
如果您同时开发两个gem或一个gem和一个rails应用程序,这将非常有用

但是请注意,这仅在您已经将git用于依赖项时有效,例如:

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

如上所示。

如果您正在使用git,也可以使用git引用本地gem

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'
然后,如果它改变了,我就跑

bundle exec gem uninstall foo
bundle update foo

但我不确定每个人都需要运行这两个步骤。

要在Rails项目中使用本地gem存储库,请遵循以下步骤:

  • 检查您的gem文件夹是否是git存储库(该命令在gem文件夹中执行)

  • 获取存储库路径(该命令在gem文件夹中执行)

  • 为rails应用程序设置本地覆盖

    bundle config local.GEM_NAME /path/to/local/git/repository
    
    其中,
    GEM\u NAME
    是您的GEM的名称,
    /path/to/local/git/repository
    是点
    2

  • 在应用程序
    Gemfile
    中添加以下行:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
  • 运行
    bundle install
    应该会得到如下结果:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    
    GEM_NAME (0.0.1 5a68b88)
    
    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
    其中,
    GEM\u NAME
    是您的GEM的名称,
    /path/to/local/git/repository
    from point
    2

  • 最后,运行
    bundle list
    ,而不是
    gem list
    ,您应该会看到如下内容:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    
    GEM_NAME (0.0.1 5a68b88)
    
    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
    
    其中
    GEM\u NAME
    是您的GEM的名称


  • 我观察到的几个重要案例如下:

    Rails 4.0.2  
    ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
    Ubuntu 13.10  
    RubyMine 6.0.3
    
    • 看起来,
      RubyMine
      并没有将本地gems显示为外部库。有关该错误的更多信息,请参见
    • 当我在本地gem中更改某些内容时,为了加载到rails应用程序中,我应该停止/启动rails服务器
    • 如果我正在更改gem的
      版本
      停止/启动
      Rails服务器会给我一个错误。为了修复它,我在rails应用程序
      Gemfile
      中指定gem版本,如下所示:

      Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
      
      GEM_NAME (0.0.1 5a68b88)
      
      gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
      

      • 如果您也想要分支机构:

        gem 'foo', path: "point/to/your/path", branch: "branch-name"
        

        您可以使用以下来源引用gems:

        source:'https://source.com,git存储库(:github=>git/url')
        和本地路径

        :path=>“…/path/gem\u name”

        您可以了解更多关于[GemFile及其使用方法]
        ()在本文中。

        我对此有问题,因为我使用的是
        BUNDLE\u PATH
        (构建分发包)。当执行您的建议或Jimmy的回答时,它只使用执行一个
        ,而不是实际安装到我的
        BUNDLE\u PATH
        文件夹中。我无法解决这个问题,有帮助吗?请注意,根据讨论,这对gempec不起作用。要禁用本地覆盖:
        bundle config--delete local.GEM_NAME
        我必须从GEM行中删除version指令才能使其起作用。如果您希望在开发中使用与生产中不同的分支,您还必须设置
        bundle config disable\u local\u branch\u check true
        ,否则Bundler会抱怨分支。但是要注意这一点,因为检查应该阻止不正确的提交进入
        Gemfile.lock
        。这里的文档:对于快速黑客会话来说,硬编码路径很好,但是bloudermilk的本地gem解决方案对于版本控制下的项目更有效。它允许您不断检入两个项目—gem和使用gem的项目—这样其他人就不必检入gem源代码或共享相同的路径。您可以通过在项目目录中使用指向本地gem的.gitignored符号链接来稍微简化这一点—这样您就可以分别对两个项目和其他项目使用源代码管理可以在没有相同目录结构的情况下执行相同的操作。需要注意的可能是Spring。如果您正在为gem使用本地路径,您可能会注意到本地gem的缓存版本,就像我在rails控制台中所做的一样。如果您的本地gem更改似乎没有被接受,请尝试
        spring stop
        ,看看它是否确实是问题所在。更好的方法是:如果您在更大的项目上测试gem的本地开发,这是一种非常好的方法。在这种情况下,这是一种“更好”的方法,然后必须推送到存储库来测试本地更改。这很好,但如果您正在积极开发gem,就不那么方便了。。。由于您需要提交每个更改&
        捆绑包卸载&&bundle安装
        ,因此对于您希望反映在应用程序上的每个更改,如果此操作不起作用,将生成一个错误:
        只有具有git源的gems才能指定分支。