【问题标题】:Custom gem dependencies not added to Gemfile.lock?自定义 gem 依赖项未添加到 Gemfile.lock?
【发布时间】:2018-07-12 02:54:32
【问题描述】:

我写了一个宝石。在我的 Gem 的 gemspec 文件中,我有这样的内容:

 spec.add_development_dependency "aws-sdk-mturk", '~> 1.3'

在我的 Gem 的一个文件中,我有:

require 'aws-sdk-mturk'

此 gem 未发布到 ruby​​gems.org。它是我私人 git 帐户上的私人宝石。所以我想把它添加到我的 Rails 项目中,所以我在 Gemfile 中做了这个:

gem "my_gem", git: "https://git.mygitlab.net/myuser/mygem.git", branch: "master"

我注意到,当我运行 bundle install 然后随后运行 bundle update --source mygem 时,在 Gemfile.lock 中它没有显示任何依赖项,包括 aws-sdk-mturk。

所以当我尝试运行 Rails 应用程序时,我得到了这个错误:

gems/activesupport-4.2.7.1/lib/active_support/dependencies.rb:274:in `require': cannot load such file -- aws-sdk-mturk (LoadError)

bundler/Rails 应用程序何时不读取我的私有 gem 的 .gemspec 依赖项?

【问题讨论】:

    标签: ruby-on-rails ruby rubygems bundler


    【解决方案1】:

    如果您的代码在运行时需要其他 gem,请将 add_development_dependency 更改为 add_runtime_dependency

    引用https://guides.rubygems.org/patterns/#declaring-dependencies

    运行时与开发

    RubyGems 提供了两种主要的依赖“类型”:运行时和开发。运行时依赖项是你的 gem 需要工作的东西 (例如需要主动支撑的铁轨)。

    当有人想要对您的 gem 进行修改时,开发依赖项很有用。当您指定开发依赖项时, 另一个开发人员可以运行 gem install --dev your_gem 和 RubyGems 将 获取两组依赖项(运行时和开发)。典型的 开发依赖包括测试框架和构建系统。

    【讨论】:

      【解决方案2】:

      改为add_runtime_dependency,而不是add_development_dependency

      来自docs

      默认情况下不安装开发依赖项 需要宝石时激活。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        • 2017-10-04
        • 2013-09-19
        相关资源
        最近更新 更多