Cider: [Diskusikan] Bagaimana cara membiarkan CIDER menggunakan gambar buruh pelabuhan Clojure?

Dibuat pada 25 Des 2018  ·  8Komentar  ·  Sumber: clojure-emacs/cider

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:

  • menjalankan wadah yang memulai Clojure REPL, pengguna dapat melampirkannya dengan paket Emacs docker.el .
  • gunakan paket Emacs 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")
  • jalankan gambar clojure untuk mengekspos ip:port ke sistem host. Sehingga Emacs dapat mengakses container Docker seperti halnya sistem host lokal. Saya belum tahu bagaimana melakukannya.

Ada yang punya saran dan solusi? Selamat datang untuk menambahkan. (Ini mungkin bisa ditambahkan ke Wiki, ketika diskusi hampir selesai) Terima kasih telah melihat.

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.

Semua 8 komentar

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")))
  • gunakan dukungan SSH host jarak jauh CIDER ke SSH ke dalam wadah Docker
  • Gunakan dukungan TRAMP transparan CIDER untuk menggunakan paket Emacs 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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat