제목이 질문이며, 여기에 질문하는 문맥이 있습니다.번들 : 왜 "bundler/setup"이 필요한지에 대한 gemspec을 읽는가?
Gemfile :
여기source "http://rubygems.org"
# Specify your gem's dependencies in the gemspec
gemspec
rackup 파일의 맨입니다 :
require 'rubygems'
require "bundler/setup"
오류가 발생하는 rackup 파일 실행에 :
<module:Rack>': GemName is not a class (TypeError)
왜? 내가 랙 미들웨어의 조각을 쓰고 있어요, 표준 레이아웃이기 때문에 :
lib/
rack/
gem_name.rb
gem_name/
version.rb
gem_name.rb이 포함됩니다
module Rack
class GemName
version.rb이 포함됩니다
module Rack
module GemName
VERSION = "0.0.1"
마지막으로, gem_name.gemspec은 다음을 포함합니다 :
require "rack/flash-in-the-pan/version"
#...
s.version = Rack::GemName::VERSION
모듈과 클래스의 이름을 같은 이름으로 지정하면 두 파일을 동시에 필요로하지 않는 한 은 문제가되지 않습니다.보통은입니다. 보석을 제작하기위한 버전이 필요하거나 보석 라이브러리를 실행해야하므로 하나 또는 다른 파일 만 필요합니다.
하지만 이번에는 Bundler를 사용하여 보석의 종속성을 관리하기로 결정했습니다. 번들러를 통해 보석 라이브러리를 요구할 때 분명히 gemspec도 실행됩니다. 나는 충분히 쉽게 "고칠 수있다. 나는 gemspec에서 손으로 버전 번호를 정의한다.
그래서 내 질문으로 돌아가서 - 번들러는 왜 도서관의 런타임에서 보석을 조사해야합니까?
들러 (1.0.21)
어떤 통찰력을 많이 받고있다.
응답 해 주셔서 감사합니다. 나는 이것을 발견했다. http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/ (당신이 대답 한 후에) 그리고 그것은 또한 whys와 wherefors를 설명한다. 그러나 나는 생각한다. "Gemfile에는 메타 데이터, 패키지에있는 파일 목록, 패키지에 의해 노출 된 실행 파일 또는로드 경로에 놓여 야하는 디렉토리가 들어 있지 않습니다. 이러한 것들은 Bundler의 범위 밖에 있습니다." 그건 내 경험이 아니에요. 특히''bundler/setup ''과 같은 명령어를 주면됩니다.답변과 팁에 다시 한 번 감사드립니다. – iain