2011-02-07 31 views
10

Trong Capistrano sử dụng phần mở rộng Đa giai đoạn, tôi có hai môi trường: prod và testing.Capistrano Kiểm tra biến không xác định trong Task

Tôi cần một vài biến trong thử nghiệm.rb không cần thiết trong prod.rb và tôi muốn một số nhiệm vụ của mình có thể kiểm tra xem biến có được xác định hay không và sử dụng nó nếu có, nhưng bỏ qua nó nếu nó chưa được đặt.

Vì vậy, trong testing.rb tôi sẽ có cái gì đó như:

set :foo, 'bar' 

prod.rb sẽ không có bất kỳ tham chiếu đến: foo vì nó không cần nó. Trong một trong những nhiệm vụ của tôi, tôi muốn làm một cái gì đó như:

if defined?(foo) 
    # do something with foo 
else 
    # do something without foo 
end 

Nhưng tôi vẫn gặp lỗi:

undefined local variable or method 'foo' 

Có cách nào để kiểm tra các biến toàn cục không xác định trong nhiệm vụ? Hoặc tôi có phải làm điều gì đó như:

set :foo, '' 

Trong tất cả các môi trường của tôi không cần biến: foo?

Trả lời

16

Hãy thử sử dụng exists?(:foo) thay vì defined?(foo), như được đề xuất trong Capistrano docs.

+1

Để mở rộng điều này một chút: được xác định? phương thức nhận một ký hiệu (: foo) thay vì một biến (foo). Phương thức set không thực sự tạo các biến ruby ​​thích hợp, nó chỉ giữ các giá trị trong một kho lưu trữ bên trong. Đó là lý do tại sao bạn cần sử dụng hàm fetch (: foo) để lấy giá trị. –

+0

Điều đó có hiệu quả, cảm ơn. Tôi khá xa lạ với Ruby và tôi đã tìm ra một giải pháp dễ dàng như thế này nhưng Google đã thất bại và tôi đã bỏ lỡ nó trong tài liệu. Tôi đã tìm các biến đã được đặt khác nhau, vì vậy chúng cần được kiểm tra khác nhau nhưng không biết sử dụng tồn tại? Tôi hoàn toàn bối rối. Cảm ơn một lần nữa. – Jaymon

+0

Điều này thật điên rồ! Tôi đã cố gắng xác định? –

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