2011-02-08 2 views
2

나는 Lovers이라는 페이스 북 앱의 새로운 버전을 만들고있다. Lovers source code on GitHub을 찾을 수 있습니다. 또한 Facebook과 함께 맞춤 보석을 제작하고 있습니다. 나는이 사용자 정의 Facebook 젬에 대한 변경 사항을 즉시 연인에게 적용하기를 원합니다.Sinatra에서 보석을 사용하는 방법?

디렉토리 구조를 구성하는 올바른 방법은 무엇입니까? 현재는 그래서 다음과 같습니다

|- config.ru 
|- features 
    |- support 
    |- env.rb 
|- lib 
    |- lovers 
    |= lovers.rb 
|- vendor 
    | - facebook 
    | - lib 
     |- modules/classes here 

내가 config.ru & env.rb에서 $LOAD_PATH./vendor/facebook/lib을 추가했다. 작동하지만, 이것을 수행하려면 init.rb 파일을 사용해야합니까? 가장 좋은 방법은 무엇입니까?

답변

1

당신은 vendor/facebook에 보석을 넣어 시몬 Carletti이 제안 Bundler 프로그램을 사용하지만, 대신 젬에서 당신의 보석을 잡아 당겨, ​​당신은에서 보석을로드 할 위치를 들러에게의 :path 옵션을 사용할 수 있었다 .

이것을 사용하면 프로젝트 트리에서 보석을 나란히 내면서 이동할 수 있습니다. 이와 몇 가지 다른 문제가 있습니다

gem 'facebook', :path => '../facebook' 

:

귀하의 Gemfile 같은 것을 포함됩니다. 당신이 당신의 보석을 관리 할 수 ​​Bundler 프로그램을 사용하기 위해서는

  1. , 당신의 보석은 .gemspec 파일이 필요합니다. gemspec은 버전 및 종속성과 같은 정보를 지정합니다. docs on it을 확인하십시오.

  2. 보석은 이미 facebook이며, 보석에 대한 다른 이름을 생각해 볼 수 있습니다.

+0

큰 소리입니다. 감사! 나는 이것을 시도 할 것이다. – ma11hew28

2

vendor 폴더를 만드는 대신 Bundler을 사용합니다.

Gemfile을 만들고 모든 요구 사항을 정의하십시오. 는 그런 다음 lovers.rb 파일에 난 보통 부하 경로에 lib를 추가 거기에 코드를 루트 폴더에 boot.rb 파일을 만들고 이동하려면 다음 코드를

require "rubygems" 
require "bundler/setup" 

Bundler.require(:default, (ENV["RACK_ENV"] || :development).to_sym) 

놓습니다.

# boot.rb 
$:.unshift(File.dirname(__FILE__) + "/lib") 

require "rubygems" 
require "bundler/setup" 

Bundler.require(:default, (ENV["RACK_ENV"] || :development).to_sym) 


# lib/lovers.rb 

require "boot" 
... 
+0

왜? 페이스 북 보석을 변경하고 그 변화가 연인에게 어떻게 영향을 미치는지 즉시 확인하는 것이 더 어렵지 않습니까? 왜냐하면 먼저 페이스 북의 보석을 먼저 묶어야하기 때문입니다. 맞습니까? 'vendor' 디렉토리를 사용하면 변경 사항이 즉시 적용됩니다. – ma11hew28

+0

제 3 자 라이브러리를 직접 변경하는 것은 좋지 않습니다.이 접근법은 업그레이드를 악몽으로 만듭니다. –

+0

타사 라이브러리가 아닙니다. 페이스 북의 보석은 레일스와 함께 ActiveRecord가 구축 된 것과 비슷하게 Lovers와 함께 구축하고있는 보석입니다. 내 질문을 다시 읽으십시오. – ma11hew28

1

나는 개발 (BDD) 방식 구동되는 행동은 별도의 소스 트리에서 페이스 북의 보석을 구축하고 RSpec에 또는 다른 테스트 장치로 테스트하는 것입니다 생각합니다.

일단 보석이 기능적으로 유용한 반복에 도달하면 제안대로 Bundler를 사용하여 응용 프로그램에 포함하십시오.

+0

왜 이것이 "Ruby Way"인가, 즉 그 이유는 무엇입니까? The Facebook gem을 업데이트하는 것이 고통 스러울 것 같습니다. 그리고 기능은 결코 완전하지 않을 것입니다. 항상 변하고있어. – ma11hew28

+0

저는 실제로 행동 주도 개발 방식의 보석 개발에 대해 설명했습니다 (제 답변을 업데이트했습니다). 나는이 방법을 사용하기 시작했다. 개발에 대한 반복적 인 접근 방식을 고려합니다. –

관련 문제