Tôi cần phải trình bao ra một quá trình trong khi thiết lập một biến môi trường cho nó. Tôi đã thử một lớp lót này:Shell ra khỏi ruby trong khi thiết lập một biến môi trường
system "RBENV_VERSION=system ruby extconf.rb"
Cú pháp này hoạt động trong tập lệnh shell chứ không phải từ ruby. (Cập nhật:. quay ra cú pháp này hoạt động từ ruby sau khi tất cả, nhưng tôi không thể nhìn thấy ảnh hưởng của nó do sử dụng hợp cụ thể nói riêng của tôi)
Vì vậy, tôi đang làm điều này:
rbenv_version = ENV['RBENV_VERSION']
ENV['RBENV_VERSION'] = 'system'
begin
system "ruby extconf.rb"
ensure
ENV['RBENV_VERSION'] = rbenv_version
end
Tôi bị buộc phải biểu hiện lâu như vậy bởi vì tôi không muốn ghi đè biến môi trường vĩnh viễn nếu nó đã có một giá trị.
Bất kỳ điều gì ngắn hơn bạn nghĩ đến?
Bạn da man. \ o/ – mislav
Đây là một câu trả lời tuyệt vời. Tài liệu cho ['Kernel # system'] (http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-system) không đủ rõ ràng về chức năng này. Rất đẹp. – Phrogz
Đối với ruby 1.8, hãy xem @ rtomayko's POSIX :: Spawn, được liên kết trong một bình luận khác. – alxndr