Ruby on rails Gemspec依赖项未随Gemfile一起加载

Ruby on rails Gemspec依赖项未随Gemfile一起加载,ruby-on-rails,ruby,bundler,Ruby On Rails,Ruby,Bundler,例如,给定gempec文件: $:.push File.expand_path("../lib", __FILE__) # Maintain your gem's version: require "github_stats/version" # Describe your gem and declare its dependencies: Gem::Specification.new do |s| s.name = "github_stats" s.version

例如,给定gempec文件:

$:.push File.expand_path("../lib", __FILE__)

# Maintain your gem's version:
require "github_stats/version"

# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
  s.name        = "github_stats"
  s.version     = GithubStats::VERSION
  s.authors     = ["Pura Dawid"]
  s.email       = ["puradawid@gmail.com"]
  s.homepage    = "https://github.com/puradawid/github_stats"
  s.summary     = "Project repository model wrapper and statistic fetcher."
  s.description = ""
  s.license     = "MIT"

  s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"]
  s.test_files = Dir["test/**/*"]

  s.add_dependency "rails", "~> 4.1.8"
  s.add_runtime_dependency "github_api", "0.12.3"

  s.add_development_dependency "sqlite3"
end
看在上帝的份上:

source 'https://rubygems.org'

# Declare your gem's dependencies in github_stats.gemspec.
# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.
gemspec

# Declare any dependencies that are still in development here instead of in
# your gemspec. These might include edge Rails or gems from your path or
# Git. Remember to move these dependencies to your gemspec before releasing
# your gem to rubygems.org.

# To use a debugger
#gem 'byebug', group: [:development, :test]

#gem 'github_api', '0.12.3'

group :development do
  gem 'byebug'
  gem 'mocha'
  gem 'guard'
  gem 'guard-minitest'
end

group :test do
  gem 'rake'
end
github\u api
被注释掉了(如果我把它放在这里,它显然可以工作)

如您所见,github_api是作为依赖项添加的(它是一个gem)。它起作用了吗?当然不是。键入一个
Bundler.require
将为我提供:

[<Bundler::Dependency type=:runtime name="github_stats" requirements=">= 0">,
<Bundler::Dependency type=:development name="sqlite3" requirements=">= 0">,
<Bundler::Dependency type=:runtime name="byebug" requirements=">= 0">,
<Bundler::Dependency type=:runtime name="mocha" requirements=">= 0">,
<Bundler::Dependency type=:runtime name="guard" requirements=">= 0">,
<Bundler::Dependency type=:runtime name="guard-minitest" requirements=">= 0">,
<Bundler::Dependency type=:runtime name="rake" requirements=">= 0">]
谢谢你们的帮助,伙计们

如果您感兴趣-。读了之后我明白了,这是标准行为。争论的焦点是依赖bundler来要求您的gem依赖项是一种糟糕的做法。您应该明确要求gem,因为您的gem应该在没有bundler的情况下工作。Bundler被广泛使用,但不像ruby gems那样是一个标准

如果您仍然需要bundler所需的gems,您可以使用以下技巧:

Bundler.definition.specs # gives all gems' dependencies
谢谢总结一下:gemspec文件中定义的依赖项永远不会被自动要求。谢谢@hakcho!
Bundler.definition.specs # gives all gems' dependencies