2012-12-04 26 views
12

Tôi có một môi trường phát triển cục bộ dựa trên các biến môi trường hệ thống (nó theo mô hình ứng dụng 12-yếu tố Heroku). Kịch bản lệnh shell cũng thiết lập điều khiển từ xa git và kích hoạt môi trường virtualenv, và nếu muốn, hãy chuyển tất cả điều này sang lệnh Fabric (hoặc chuỗi lệnh), vì chúng ta đang sử dụng Fabric cho một loạt các thứ khác và tôi muốn gỡ bỏ tập lệnh shell.Làm thế nào để thiết lập các biến môi trường bằng cách sử dụng Fabric

Chạy local('export FOO=bar') không hoạt động:

$ fab set_default_env_vars 
Using fabfile '/home/hugo/Projects/test/fabfile.py' 
[localhost] local: export FOO=bar 

Done. 

$ echo $FOO 

$ 

Đây có phải là có thể - và nếu như vậy, làm thế nào?

Trả lời

19

Bạn có thể sử dụng fabric.context_managers.shell_env để export một biến để bash cho vỏ của bạn và tất cả các subshells sinh ra từ nó - nhưng các biến đó sẽ không tồn tại ngoài vỏ mà chúng được xác định cho (vì vậy bạn không thể đặt biến môi trường cho vỏ mẹ từ một kịch bản vải theo cách ví dụ của bạn có nó).

Bạn thể thiết lập một kịch bản bash mà bạn nguồn cho môi trường địa phương của bạn đó là identical to what you would add to ~/.profile in your production slug (trong phím của nó, không nhất thiết phải giá trị của nó) và sử dụng fabric.context_managers.prefix nguồn tập tin đó trước khi bạn chạy lệnh địa phương của bạn.