Cider: [Discutir] Como permitir que o CIDER use a imagem docker do Clojure?

Criado em 25 dez. 2018  ·  8Comentários  ·  Fonte: clojure-emacs/cider

Esta é uma discussão, mas para manter registros e pode ajudar outras pessoas. Então, eu registro aqui. Eu sei que existe um canal #cider/#emacs no Slack. Vou postar esse link ali.

Quero usar uma versão e um ambiente diferente do Clojure. Existe uma imagem oficial do Clojure Docker. https://hub.docker.com/_/clojure

Estou pensando em como usar o binário da imagem Clojure e REPL no Emacs e CIDER.

Existem algumas maneiras de acessar a imagem do Docker como eu sei:

  • executando o contêiner que iniciou o Clojure REPL, o usuário pode anexá-lo com o pacote Emacs docker.el .
  • use o pacote Emacs docker-tramp.el e docker.el para acessar comandos binários do contêiner clojure como clojure , clj etc. Para que o Emacs os use como caminho de comando executável. Como a CIDER, tem a opção de personalização cider-clojure-cli-command . Tentei seguir, mas falhei.
(add-to-list 'exec-path "/docker:clojure:/usr/local/bin/")
(setq cider-clojure-cli-command "/docker:clojure:/usr/local/bin/clojure")
  • execute a imagem clojure para expor o ip: port ao sistema host. Para que o Emacs possa acessar o contêiner do Docker da mesma forma que o sistema host local. Ainda não sei fazer isso.

Alguém tem sugestão e solução? Bem-vindo ao adicionar. (Isso pode aumentar o Wiki, quando a discussão está quase) Obrigado por ver.

Comentários muito úteis

@darkleaf entendo. Obrigado.

@zilti alternar a versão do Java, a versão do Clojure é mais simples no Docker? e é mais limpo. Fácil de empacotar a imagem e depois compartilhar, mais simples de reproduzir o problema do ambiente. Admito que Leiningen e Boot (eu mesmo não usei) é ótimo. Ainda obrigado pelo seu conselho.

Todos 8 comentários

Descobri que o CIDER tem uma variável para manter os registros de conexão. Pode ser usado em maiúsculas.

Assim:

(setq cider-known-endpoints
  '(("host-a" "10.10.10.1" "7888")
    ("host-b" "7888")))
  • usar suporte SSH de host remoto CIDER para SSH no contêiner Docker
  • Use o suporte TRAMP transparente do CIDER para usar o pacote Emacs docker-tramp.el para abrir arquivos no contêiner, então cider-jack-in-* , o CIDER poderia lidar com isso de forma transparente.

Eu uso docker-compose e volumes:

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

Eu corro docker-compose run --rm --service-port app bash e de clojure -Acider .
No emacs, pressiono C-c M-c e conecto localhost:4444 .

Dependências são instaladas em volumes. Portanto, o Emacs não pode ter acesso a eles.

Dependências são instaladas em volumes. Portanto, o Emacs não pode ter acesso a eles.

Estou confuso com isso. As dependências são instaladas nos volumes, mas o Emacs CIDER se conecta ao contêiner iniciado em clojure -Acider alias. Portanto, se clojure -Acider deve ser capaz de acessar todas as dependências no contêiner. Adicionar dependências de projeto a um arquivo de contêiner deps.edn ?

O Docker pode acessar as dependências de .m2/ do sistema host? Assim, o Docker será uma ponte entre o Emacs CIDER e as dependências do sistema host.

Temos o Maven e ferramentas como Boot e Leiningen, por que diabos o Docker seria necessário aqui? Só porque está na moda?

@stardiviner

Estou confuso com isso.

REPL é iniciado dentro de um contêiner do docker. Este processo tem acesso ao sistema de arquivos do contêiner
com caminhos relacionados ao contêiner. Bloquear na seção de volumes:

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

$PWD é /User/darkleaf/projects/project por exemplo. Portanto, as fontes do projeto são
disponível no mesmo caminho dentro do contêiner.
Faz sentido. O REPL pode enviar ao Emacs algum caminho e esse caminho está relacionado ao contêiner.
O Emacs não pode obter um arquivo no sistema de arquivos host se os caminhos forem inconsistentes.
Portanto, eu uso ${PWD} .

Mais tarde eu costumava montar .m2 e .gitlibs do sistema de arquivos host.
Eu uso o Docker para Mac e seus volumes de host são lentos. Então, mudei para volumes de contêiner.

@darkleaf entendo. Obrigado.

@zilti alternar a versão do Java, a versão do Clojure é mais simples no Docker? e é mais limpo. Fácil de empacotar a imagem e depois compartilhar, mais simples de reproduzir o problema do ambiente. Admito que Leiningen e Boot (eu mesmo não usei) é ótimo. Ainda obrigado pelo seu conselho.

Parece que você resolveu isso, então fecharei este tíquete.

Esta página foi útil?
0 / 5 - 0 avaliações