Cider: [Discutir] ¿Cómo permitir que CIDER utilice la imagen de la ventana acoplable de Clojure?

Creado en 25 dic. 2018  ·  8Comentarios  ·  Fuente: clojure-emacs/cider

Esta es una discusión, pero para mantener registros y podría ayudar a otras personas. Así que lo grabo aquí. Sé que hay un canal #cider/#emacs en Slack. Publicaré este enlace allí.

Quiero usar una versión y un entorno diferentes de Clojure. Hay una imagen oficial de Clojure Docker. https://hub.docker.com/_/clojure

Estoy pensando en cómo usar el binario y REPL de la imagen de Clojure en Emacs y CIDER.

Hay algunas formas de acceder a la imagen de Docker como yo sé:

  • ejecutando el contenedor que inició Clojure REPL, el usuario puede adjuntarlo con el paquete Emacs docker.el .
  • use el paquete Emacs docker-tramp.el y docker.el para acceder a los comandos binarios del contenedor clojure como clojure , clj etc. Para que Emacs los use como ruta de comando ejecutable. Al igual que CIDER, tiene la opción de personalizar cider-clojure-cli-command . Intenté seguir, pero fallé.
(add-to-list 'exec-path "/docker:clojure:/usr/local/bin/")
(setq cider-clojure-cli-command "/docker:clojure:/usr/local/bin/clojure")
  • ejecute la imagen de clojure para exponer el puerto ip: al sistema host. Para que Emacs pueda acceder al contenedor de Docker al igual que el sistema host local. Todavía no sé cómo hacer eso.

¿Alguien tiene sugerencia y solución? Bienvenido a agregar. (Esto podría agregarse a Wiki, cuando la discusión esté casi terminada) Gracias por ver.

Comentario más útil

@darkleaf ya veo. Gracias.

@zilti cambia la versión de Java, ¿la versión de Clojure es más simple en Docker? y es más limpio. Imagen fácil de empaquetar y luego compartir, problema ambiental más simple de reproducir. Admito que Leiningen y Boot (no lo he usado yo mismo) es genial. Aún así, gracias por tu consejo.

Todos 8 comentarios

Descubrí que CIDER tiene una variable para mantener registros de conexión. Podría usarse en mayúsculas.

Como esto:

(setq cider-known-endpoints
  '(("host-a" "10.10.10.1" "7888")
    ("host-b" "7888")))
  • use el soporte SSH del host remoto de CIDER para SSH en el contenedor Docker
  • Use el soporte transparente de TRAMP de CIDER para usar el paquete Emacs docker-tramp.el para abrir archivos en el contenedor, luego cider-jack-in-* , CIDER podría manejar esto de manera transparente.

Yo uso docker-compose y volúmenes:

# 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"]}}}

Ejecuto docker-compose run --rm --service-port app bash y luego clojure -Acider .
En emacs presiono C-c M-c y me conecto a localhost:4444 .

Las dependencias se instalan en volúmenes. Entonces Emacs no puede tener acceso a ellos.

Las dependencias se instalan en volúmenes. Entonces Emacs no puede tener acceso a ellos.

Estoy confundido con esto. Las dependencias se instalan en volúmenes, pero Emacs CIDER se conecta al contenedor iniciado clojure -Acider alias. Entonces, si clojure -Acider debería poder acceder a todas las dependencias en el contenedor. ¿Agregar dependencias del proyecto en un contenedor deps.edn file?

¿Puede Docker acceder a las dependencias .m2/ del sistema host? De modo que Docker será un puente entre Emacs CIDER y las dependencias del sistema host.

Tenemos Maven y herramientas como Boot y Leiningen, ¿por qué demonios sería necesario Docker aquí? ¿Solo porque está de moda?

@stardiviner

Estoy confundido con esto.

REPL se inicia dentro de un contenedor docker. Este proceso tiene acceso al sistema de archivos del contenedor.
con rutas relacionadas con contenedores. Bloquear en la sección de volúmenes:

    volumes:
      - ".:${PWD}:cached" # cached - MacOS option
      - m2:/root/.m2
      - gitlibs:/root/.gitlibs

$PWD es /User/darkleaf/projects/project por ejemplo. Entonces las fuentes del proyecto son
disponible en la misma ruta dentro del contenedor.
Tiene sentido. REPL puede enviar a Emacs alguna ruta y esa ruta está relacionada con el contenedor.
Emacs no puede obtener un archivo en el sistema de archivos del host si las rutas son inconsistentes.
Entonces uso ${PWD} .

Más tarde solía montar .m2 y .gitlibs desde el sistema de archivos del host.
Utilizo Docker para Mac y sus volúmenes de host son lentos. Así que cambié a volúmenes de contenedores.

@darkleaf ya veo. Gracias.

@zilti cambia la versión de Java, ¿la versión de Clojure es más simple en Docker? y es más limpio. Imagen fácil de empaquetar y luego compartir, problema ambiental más simple de reproducir. Admito que Leiningen y Boot (no lo he usado yo mismo) es genial. Aún así, gracias por tu consejo.

Parece que lo resolvió, así que cerraré este boleto.

¿Fue útil esta página
0 / 5 - 0 calificaciones