2010-09-20 11 views
5

Tôi tự hỏi làm thế nào để làm cho một gem có thể truy cập trong một ứng dụng Rails 3 mà không đặt một tham chiếu đến nó trong gemfile. Tôi muốn làm điều này với ruby-debug (Tôi đang sử dụng ruby-debug19). Tôi sử dụng điều này để gỡ lỗi, nhưng không phải tất cả mọi người trong nhóm của tôi làm và ép buộc sự phụ thuộc chỉ vì vậy tôi có thể sử dụng nó không có vẻ rất ngoại giao. Có cách nào khác không?Làm thế nào để sử dụng một viên ngọc trong Rails 3 mà không cần tham khảo nó trong Gemfile

Nếu nó kết thúc lên mattering, Tôi đang sử dụng Rails3, Bundler 1.0.0, Ruby 1.9.2, RVM, OSX Snow Leopard

Trên một mặt lưu ý, tôi đã nghĩ về việc sử dụng tính năng nhóm gemfile, nhưng điều này cũng không cảm thấy đúng. Nhóm có vẻ tuyệt vời cho những thứ như factory_girl, nơi có một sự phụ thuộc thực tế mặc dù chỉ trong môi trường specfic, nhưng với ruby-debug không có nhu cầu thực sự cho nó ở đó trừ khi bạn muốn sử dụng nó.

+0

Tôi quyết định tìm ra điều này cho chính mình và sẽ chia sẻ nếu tôi làm. IMO Bundler là điều tồi tệ nhất từng xảy ra với Rails. – bioneuralnet

Trả lời

2

AFAIK bạn không thể vì Rails 3 cô lập Gems hệ thống.

Đề xuất của tôi là thêm Đá quý vào Gemfile với tùy chọn :require => false để nó được bao gồm, cài đặt nhưng không bao giờ được tải. Sau đó, trong ứng dụng của bạn, yêu cầu đá quý theo cách thủ công. Hoặc bạn có thể thử gói nó trong dự án của bạn, trong thư mục nhà cung cấp (nên có một thư mục cho Gems) và bỏ qua thư mục gem cụ thể trong SCM của bạn để đồng nghiệp của bạn không bị ảnh hưởng.

+0

Cảm ơn bạn đã đề xuất. Tôi thực sự ghét thậm chí yêu cầu cài đặt của đá quý mặc dù.Việc cài đặt gem đặc biệt này không phải lúc nào cũng thẳng về phía trước và lệnh 'bundle install' sau đó sẽ bị lỗi như sau: ( –

3

Điều này thực sự xấu xí và nó không kéo nó ra khỏi gemfile của bạn, nhưng tôi làm điều này trong Gemfile của tôi vì vậy tôi có thể sử dụng 2 nguồn khác nhau cho một viên ngọc trong các môi trường khác nhau:

if ENV['MY_RDEBUG_VAR'] == "i_want_to_use_rdebug" 
    gem "ruby-debug" 
end 

Chỉ cần làm cho nó một biến môi trường tối nghĩa mà chỉ bạn sẽ đặt trên hệ thống của bạn. Bằng cách đó, đồng nghiệp của bạn sẽ không có bộ env var và đá quý sẽ không bao giờ được cài đặt hoặc tải cho chúng.

0

Tôi đã kết thúc việc thêm mã sau vào trình khởi tạo đường ray và bỏ qua nó trong tệp .git/info/exclude.

$: << Bundler.bundle_path.join("gems", "ruby-debug19-0.11.6", "cli") 
$: << Bundler.bundle_path.join("gems", "ruby-debug-base19-0.11.24", "lib") 
$: << Bundler.bundle_path.join("gems", "linecache19-0.5.11", "lib") 
$: << Bundler.bundle_path.join("gems", "columnize-0.3.1", "lib") 
require 'ruby-debug' 

Trong khi điều này làm việc, tôi không biết có nên thực hiện điều này hay không, chấp nhận thực tế rằng những phụ thuộc này cần được đặt trong tệp đá quý có thể là tốt nhất.

+0

Sử dụng giải pháp này có nguy cơ của riêng bạn. Tôi tin rằng nó đã ngừng hoạt động cho tôi trong một lần tiếp theo Phiên bản của RVM. Bây giờ-một-ngày tôi thêm ruby-debug vào nhóm phát triển trong gemfile của tôi. –

0

Đây là giải pháp của riêng tôi để sử dụng ruby_debug với cả ruby ​​1,8 và 1,9

if RUBY_VERSION.include?('1.9') 
    ruby_debug = 'ruby-debug19' # new branch for ruby-debug that supports 1.9 
else 
    ruby_debug = 'ruby-debug' 
    gem 'fastercsv' # ruby 1.9 bundles FasterCSV now 
end 


group :test do 
    gem 'webrat' 
    gem "factory_girl" 
    gem 'shoulda' 

    # gem 'redgreen' 
    gem 'autotest-rails' 
    gem 'autotest-fsevent' 
    gem 'autotest' 
    gem ruby_debug 
end 

group :development do 
    gem ruby_debug 
end 
0

Tôi biết điều này không bao gồm một số trường hợp khác, nơi nó sẽ được tốt đẹp nếu có một cách sạch để thực hiện điều này - - autotest-growlautotest-fsevent lưu ý, cũng như rất nhiều thứ tôi cần/giải cứu trong .irbrc của mình để có trải nghiệm đẹp hơn mà tôi không muốn ép buộc mọi người, chẳng hạn như hirb và hirb - nhưng cụ thể là ruby-debug, ruby-debug-wrapper gem hữu ích nếu thử nghiệm chống lại nhiều phiên bản Ruby là một phần của nỗi đau của bạn.

Nếu bạn muốn tránh cài đặt bất kỳ phiên bản nào của ruby-debug, tôi nghĩ tùy chọn mà những người khác đã đề xuất là những cách duy nhất hiện tại.