Saya memiliki proyek Heroku yang menggunakan variabel lingkungan untuk mendapatkan konfigurasinya, tetapi saya menggunakan virtualenv untuk menguji aplikasi saya secara lokal terlebih dahulu.
Apakah ada cara untuk mengatur variabel lingkungan yang ditentukan pada mesin jarak jauh di dalam virtualenv?
python
heroku
environment-variables
virtualenv
Mahmoud Hanafy
sumber
sumber
.env
file bork Heroku dibangun, setidaknya dalam pengalaman saya. Jadi jangan memasukkannya ke dalam repo Anda. Pengguna lama / penggemar autoenv btw. Hai, Kenneth, Anda laki-laki!Jika Anda menggunakan virtualenvwrapper (saya sangat merekomendasikan melakukannya), Anda dapat menentukan kait yang berbeda (preactivate, postactivate, predeactivate, postdeactivate) menggunakan skrip dengan nama yang sama di
$VIRTUAL_ENV/bin/
. Anda memerlukan pengait postaktivasi.Jika Anda ingin menyimpan konfigurasi ini di direktori proyek Anda, cukup buat symlink dari direktori proyek Anda ke
$VIRTUAL_ENV/bin/postactivate
.Anda bahkan dapat mengotomatiskan pembuatan symlink setiap kali Anda menggunakan mkvirtualenv .
Membersihkan saat dinonaktifkan
Ingatlah bahwa ini tidak akan bersih setelahnya. Saat Anda menonaktifkan virtualenv, variabel lingkungan akan tetap ada. Untuk membersihkan secara simetris, Anda dapat menambahkan
$VIRTUAL_ENV/bin/predeactivate
.Ingat bahwa jika menggunakan ini untuk variabel lingkungan yang mungkin sudah diatur di lingkungan Anda maka yang tidak disetel akan mengakibatkan mereka benar-benar tidak disetel saat meninggalkan virtualenv. Jadi jika itu kemungkinan Anda bisa mencatat nilai sebelumnya di suatu tempat sementara kemudian membacanya kembali pada nonaktifkan.
Mempersiapkan:
Uji:
sumber
ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
tidak berhasil untuk saya.ln
ingin jalan penuh, jadi saya harus melakukanln -s `pwd`/.env/postactivate $VIRTUAL_ENV/bin/postactivate
ln
.ln
menyukai path lengkap jadi saya mencobanya dan berhasil. Ketika saya mencobacat
symlink dengan path relatif katanyaNo such file or directory
.Kamu bisa mencoba:
di virtualenv_root / bin / aktifkan. Pada dasarnya skrip aktivasi adalah apa yang dijalankan ketika Anda mulai menggunakan virtualenv sehingga Anda dapat menempatkan semua penyesuaian Anda di sana.
sumber
deactivate
fungsi yang didefinisikan virtualenv_root / bin / aktifkan ke pengaturan keseimbangan dan unsettingMenggunakan hanya virtualenv (tanpa virtualenvwrapper ), pengaturan variabel lingkungan mudah melalui
activate
skrip yang Anda sumber untuk mengaktifkan virtualenv.Lari:
Tambahkan variabel lingkungan ke akhir file seperti ini:
Anda juga dapat mengatur pengait serupa untuk menghapus variabel lingkungan seperti yang disarankan oleh Danilo Bargen dalam jawaban besarnya di atas jika perlu.
sumber
cd
hanya untuk memiliki variabel lingkungan? shudderMeskipun ada banyak jawaban yang bagus di sini, saya tidak melihat solusi yang diposting yang keduanya menyertakan variabel lingkungan yang tidak disetel pada penonaktifan dan tidak memerlukan perpustakaan tambahan di luar
virtualenv
, jadi inilah solusi saya yang hanya melibatkan pengeditan / bin / aktifkan, menggunakan variabelMY_SERVER_NAME
danMY_DATABASE_URL
sebagai contoh:Seharusnya ada definisi untuk menonaktifkan skrip aktivasi, dan Anda ingin menghapus variabel Anda di akhir skrip:
Kemudian di akhir skrip aktivasi, atur variabel:
Dengan cara ini Anda tidak perlu menginstal apa pun untuk membuatnya berfungsi, dan Anda tidak berakhir dengan variabel yang tersisa ketika Anda
deactivate
virtualenv.sumber
Secara lokal dalam virtualenv ada dua metode yang dapat Anda gunakan untuk menguji ini. Yang pertama adalah alat yang diinstal melalui Heroku toolbelt (https://toolbelt.heroku.com/). Alat itu mandor. Ini akan mengekspor semua variabel lingkungan Anda yang disimpan dalam file .env secara lokal dan kemudian menjalankan proses aplikasi dalam Procfile Anda.
Cara kedua jika Anda mencari pendekatan yang lebih ringan adalah memiliki file .env secara lokal kemudian jalankan:
sumber
Instal autoenv baik oleh
(atau)
Dan kemudian buat
.env
file di folder proyek virtualenv AndaSekarang semuanya bekerja dengan baik.
sumber
Jika Anda sudah menggunakan Heroku, pertimbangkan untuk menjalankan server Anda melalui Foreman . Ini mendukung
.env
file yang hanya berupa daftar barisKEY=VAL
yang akan diekspor ke aplikasi Anda sebelum dijalankan.sumber
Cara lain untuk melakukannya yang dirancang untuk Django, tetapi harus bekerja di sebagian besar pengaturan, adalah dengan menggunakan Django-dotenv.
sumber
Untuk mengaktifkan virtualenv di
env
direktori dan mengekspor variabel lingkungan yang disimpan.env
digunakan:sumber
echo 'alias e=". env/bin/activate && set -a; source .env; set +a"' >> ~/.bash_aliases