2012-02-11 36 views
20

Đây là câu hỏi đá quý ruby ​​thực sự cơ bản. Tôi quen thuộc với việc viết các tập lệnh ruby ​​đơn giản như thế này:Đá quý Ruby trong các tập lệnh ruby ​​độc lập

#!/usr/bin/ruby 
require 'time' 
t = Time.at(123) 
puts t 

Bây giờ tôi muốn sử dụng đá quý ruby ​​của riêng mình trong tập lệnh. Trong dự án đường ray của tôi, tôi có thể chỉ đơn giản là require 'my_gem'. Tuy nhiên điều này không làm việc trong một kịch bản độc lập. Cách tốt nhất/thích hợp để sử dụng đá quý của riêng tôi trong tập lệnh ruby ​​độc lập là gì?

Trả lời

25

Bạn có thể chỉ cần yêu cầu trực tiếp trong các phiên bản Ruby gần đây.

# optional, also allows you to specify version 
gem 'chronic', '~>0.6' 

# just require and use it 
require 'chronic' 
puts Chronic::VERSION # yields "0.6.7" for me 

Nếu bạn vẫn còn trên Ruby 1.8 (mà không đòi hỏi RubyGems theo mặc định), bạn sẽ phải đặt một cách rõ ràng dòng này trên nỗ lực của bạn để tải các đá quý:

require 'rubygems' 

Ngoài ra, bạn có thể gọi trình thông dịch Ruby với cờ -rubygems sẽ có cùng tác dụng.

Xem thêm:

2

Tôi không chắc chắn nếu tôi hiểu câu hỏi của bạn đúng, nhưng có lẽ bạn không có một viên ngọc, ngay cả khi bạn viết nó (bạn là một người mới bắt đầu, vì vậy có lẽ bạn hiểu lầm các khái niệm về đá quý).

Chỉ cần chắc chắn: Bạn có gemspec cho đá quý của mình? Nếu không, sau đó bạn không có đá quý, nhưng một kịch bản duy nhất.

Khi bạn muốn kịch bản của riêng bạn trong kịch bản khác, bạn có thể chỉ cần làm:

require 'my_script' 

Với ruby ​​1.8 này hoạt động tốt, nếu my_script.rb là trong thư mục tương tự như kịch bản chính của bạn. Với ruby ​​1.9+ bạn có thể sử dụng:

require_relative 'my_script' 

Không cần đá quý trong trường hợp này.

+0

Đó là đá quý. Đó là một phần của dự án đường ray lớn hơn. Tôi không muốn tải toàn bộ dự án đường ray chỉ để sử dụng đá quý này trong kịch bản của tôi. – SundayMonday

6

Bạn có thể sử dụng một cái gì đó như thế này. Nó sẽ cài đặt đá quý nếu nó chưa được cài đặt:

def load_gem(name, version=nil) 
    # needed if your ruby version is less than 1.9 
    require 'rubygems' 

    begin 
    gem name, version 
    rescue LoadError 
    version = "--version '#{version}'" unless version.nil? 
    system("gem install #{name} #{version}") 
    Gem.clear_paths 
    retry 
    end 

    require name 
end 

load_gem 'your_gem' 
1

Cài đặt đá quý với thứ gì đó như sau sẽ hoạt động. Hãy chú ý xem liệu đá quý có nên được cài đặt như một phần của hệ thống ruby ​​hoặc của người dùng hay không.

#!/usr/bin/env ruby 

require 'rubygems' 

def install_gem(name, version=Gem::Requirement.default) 
    begin 
    gem name, version 
    rescue LoadError 
    print "ruby gem '#{name}' not found, " << 
     "would you like to install it (y/N)? : " 
    answer = gets 
    if answer[0].downcase.include? "y" 
     Gem.install name, version 
    else 
     exit(1) 
    end 
    end 
end 

# any of the following will work... 
install_gem 'activesupport' 
install_gem 'activesupport', '= 4.2.5' 
install_gem 'activesupport', '~> 4.2.5' 

# require as normal (since not all gems install & require with same name) ... 
require 'active_support/all' 

... 
Các vấn đề liên quan