Это обсуждение, но для того, чтобы вести записи, и это может помочь другим людям. Я записываю это здесь. Я знаю, что в Slack есть канал #cider/#emacs
. Я отправлю эту ссылку там.
Я хочу использовать другую версию и среду Clojure. Есть официальный образ Clojure Docker. https://hub.docker.com/_/clojure
Я думаю, как использовать двоичный файл образа Clojure и REPL в Emacs и CIDER.
Насколько я знаю, есть несколько способов получить доступ к образу Docker:
docker.el
.docker-tramp.el
и docker.el
для доступа к двоичным командам контейнера clojure, таким как clojure
, clj
и т. д. Чтобы Emacs использовал их как путь к исполняемым командам. Как и у CIDER есть опция настройки cider-clojure-cli-command
. Я пробовал подписаться, но не смог.(add-to-list 'exec-path "/docker:clojure:/usr/local/bin/")
(setq cider-clojure-cli-command "/docker:clojure:/usr/local/bin/clojure")
У кого-нибудь есть предложение и решение? Добро пожаловать, чтобы добавить. (Это могло бы добавить в Wiki, когда обсуждение почти) Спасибо за просмотр.
Я обнаружил, что у CIDER есть переменная для хранения записей о подключениях. Может использоваться в верхнем регистре.
Нравится:
(setq cider-known-endpoints
'(("host-a" "10.10.10.1" "7888")
("host-b" "7888")))
docker-tramp.el
для открытия файлов в контейнере, тогда cider-jack-in-*
, CIDER может прозрачно обработать это.Использую docker-compose и тома:
# 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"]}}}
Я запускаю docker-compose run --rm --service-port app bash
а затем clojure -Acider
.
В emacs я нажимаю C-c M-c
и подключаюсь к localhost:4444
.
Зависимости устанавливаются в тома. Таким образом, Emacs не может иметь к ним доступа.
Зависимости устанавливаются в тома. Таким образом, Emacs не может иметь к ним доступа.
Я запутался в этом. Зависимости устанавливаются в тома, но Emacs CIDER подключается к контейнеру, запущенному псевдонимом clojure -Acider
. Итак, если clojure -Acider
должен иметь доступ ко всем зависимостям в контейнере. Добавить зависимости проекта в контейнер deps.edn
файл?
Может ли Docker получить доступ к зависимостям .m2/
хост-системы? Так что Docker будет мостом между Emacs CIDER и зависимостями хост-системы.
У нас есть Maven и такие инструменты, как Boot и Leiningen, зачем вообще здесь Docker? Просто потому, что это модно?
@stardiviner
Я запутался в этом.
REPL запускается внутри контейнера докеров. У этого процесса есть доступ к файловой системе контейнера.
с путями, связанными с контейнером. Заблокировать раздел объемов:
volumes:
- ".:${PWD}:cached" # cached - MacOS option
- m2:/root/.m2
- gitlibs:/root/.gitlibs
Например, $PWD
- это /User/darkleaf/projects/project
. Итак, исходники проекта
доступно по тому же пути внутри контейнера.
В этом есть смысл. REPL может послать Emacs некоторый путь, и этот путь связан с контейнером.
Emacs не может получить файл в файловой системе хоста, если пути несовместимы.
Поэтому я использую ${PWD}
.
Позже я использовал для монтирования .m2
и .gitlibs
из файловой системы хоста.
Я использую Docker для Mac, и его хост-тома медленные. Поэтому я перешел на контейнерные объемы.
@darkleaf Понятно . Спасибо.
@zilti switch версия Java, версия Clojure проще на Docker? и это чище. Легко упаковать изображение, а затем поделиться, проще воспроизвести проблему окружающей среды. Я признаю, что Leiningen и Boot (я сам им не пользовался) - это здорово. Тем не менее, спасибо за совет.
Кажется, вы разобрались, поэтому я закрою этот тикет.
Самый полезный комментарий
@darkleaf Понятно . Спасибо.
@zilti switch версия Java, версия Clojure проще на Docker? и это чище. Легко упаковать изображение, а затем поделиться, проще воспроизвести проблему окружающей среды. Я признаю, что Leiningen и Boot (я сам им не пользовался) - это здорово. Тем не менее, спасибо за совет.