Ini adalah diskusi, tetapi untuk menyimpan catatan, dan mungkin membantu orang lain. Jadi saya merekamnya di sini. Saya tahu ada saluran #cider/#emacs
di Slack. Saya akan memposting tautan ini di sana.
Saya ingin menggunakan versi dan lingkungan Clojure yang berbeda. Ada gambar Clojure Docker resmi. https://hub.docker.com/_/clojure
Saya sedang berpikir bagaimana menggunakan biner gambar Clojure dan REPL di Emacs, dan CIDER.
Ada beberapa cara untuk mengakses image Docker seperti yang saya tahu:
docker.el
.docker-tramp.el
dan docker.el
untuk mengakses perintah biner wadah clojure seperti clojure
, clj
dll. Sehingga Emacs menggunakannya sebagai jalur perintah yang dapat dieksekusi. Seperti CIDER memiliki opsi penyesuaian cider-clojure-cli-command
. Saya mencoba mengikuti, tetapi gagal.(add-to-list 'exec-path "/docker:clojure:/usr/local/bin/")
(setq cider-clojure-cli-command "/docker:clojure:/usr/local/bin/clojure")
Ada yang punya saran dan solusi? Selamat datang untuk menambahkan. (Ini mungkin bisa ditambahkan ke Wiki, ketika diskusi hampir selesai) Terima kasih telah melihat.
Saya menemukan CIDER memiliki variabel untuk menyimpan catatan koneksi. Dapat digunakan dalam kasus yang disebutkan di atas.
Seperti ini:
(setq cider-known-endpoints
'(("host-a" "10.10.10.1" "7888")
("host-b" "7888")))
docker-tramp.el
untuk membuka file di wadah, kemudian cider-jack-in-*
, CIDER dapat menangani ini secara transparan.Saya menggunakan komposisi dan volume buruh pelabuhan:
# docker-compose.yml
version: '3'
volumes:
m2:
gitlibs:
services:
app:
image: clojure:tools-deps-alpine
working_dir: "${PWD}"
command: "true"
ports:
- "4444:4444" # nrepl
- "4445:4445" # http
environment:
- "CLJ_CONFIG=${PWD}/.docker-clojure"
- DATABASE_URL=postgres://postgres:password<strong i="6">@db</strong>:5432/postgres
- TEST_DATABASE_URL=postgres://postgres:password@test-db:5432/postgres
- PORT=4446
volumes:
- ".:${PWD}:cached" # cached - MacOS option
- m2:/root/.m2
- gitlibs:/root/.gitlibs
links:
- db
- test-db
db: &db
image: postgres:10.4-alpine
environment:
- POSTGRES_PASSWORD=password
test-db:
<<: *db
;; .docker-clojure/deps.edn
{:aliases {:cider {:extra-deps {darkleaf/cider-tools-desp
{:git/url "https://github.com/darkleaf/cider-tools-deps.git"
:sha "1025b510db24b36ab741bc5599e36806eec904ec"}}
:main-opts ["-m" "darkleaf.cider-tools-deps"
"port" "4444" "host" "0.0.0.0"]}
:repl {:extra-deps {darkleaf/repl-tools-deps
{:git/url "https://github.com/darkleaf/repl-tools-deps.git"
:sha "04e128ca67785e4eb7ccaecfdaffa3054442358c"}}
:main-opts ["-m" "darkleaf.repl-tools-deps"]}
:run-tests {:extra-deps {com.cognitect/test-runner
{:git/url "https://github.com/cognitect-labs/test-runner.git"
:sha "028a6d41ac9ac5d5c405dfc38e4da6b4cc1255d5"}}
:main-opts ["-m" "cognitect.test-runner"]}
:coverage {:extra-deps {cloverage {:mvn/version "1.0.13"}}
:main-opts ["-m" "cloverage.coverage" "-p" "src" "-s" "test"]}}}
Saya menjalankan docker-compose run --rm --service-port app bash
dan dari clojure -Acider
.
Di emacs saya menekan C-c M-c
dan terhubung ke localhost:4444
.
Dependensi dipasang ke dalam volume. Jadi Emacs tidak dapat mengaksesnya.
Dependensi dipasang ke dalam volume. Jadi Emacs tidak dapat mengaksesnya.
Saya bingung ini. Dependensi diinstal ke dalam volume, tetapi Emacs CIDER terhubung ke wadah mulai clojure -Acider
alias. Jadi jika clojure -Acider
harus dapat mengakses semua dependensi dalam wadah. Tambahkan dependensi proyek ke dalam wadah file deps.edn
?
Bisakah Docker mengakses dependensi .m2/
sistem Host? Sehingga Docker akan menjadi jembatan antara Emacs CIDER dan dependensi sistem host.
Kami memiliki Maven dan alat seperti Boot dan Leiningen, mengapa Docker diperlukan di sini? Hanya karena itu trendi?
@stardiviner
Saya bingung ini.
REPL dimulai di dalam wadah buruh pelabuhan. Proses ini memiliki akses ke sistem file kontainer
dengan jalur terkait kontainer. Kunci di bagian volume:
volumes:
- ".:${PWD}:cached" # cached - MacOS option
- m2:/root/.m2
- gitlibs:/root/.gitlibs
$PWD
adalah /User/darkleaf/projects/project
misalnya. Jadi sumber proyek adalah
tersedia di jalur yang sama di dalam wadah.
Ini masuk akal. REPL dapat mengirim ke Emacs beberapa jalur dan jalur itu terkait dengan wadah.
Emacs tidak bisa mendapatkan file di sistem file host jika jalurnya tidak konsisten.
Jadi saya menggunakan ${PWD}
.
Kemudian saya biasa me-mount .m2
dan .gitlibs
dari sistem file host.
Saya menggunakan Docker untuk Mac dan volume hostnya lambat. Jadi saya beralih ke volume kontainer.
@darkleaf saya melihat. Terima kasih.
@zilti beralih versi Java, versi Clojure lebih sederhana di Docker? dan itu lebih bersih. Mudah untuk mengemas gambar kemudian dibagikan, lebih mudah untuk mereproduksi masalah lingkungan. Saya akui Leiningen dan Boot (saya sendiri belum menggunakannya) bagus. Masih terima kasih atas saran Anda.
Sepertinya Anda sudah menyelesaikannya, jadi saya akan menutup tiket ini.
Komentar yang paling membantu
@darkleaf saya melihat. Terima kasih.
@zilti beralih versi Java, versi Clojure lebih sederhana di Docker? dan itu lebih bersih. Mudah untuk mengemas gambar kemudian dibagikan, lebih mudah untuk mereproduksi masalah lingkungan. Saya akui Leiningen dan Boot (saya sendiri belum menggunakannya) bagus. Masih terima kasih atas saran Anda.