На прошлой неделе мне было поручено разработать быстрый прототип, который использовал AngularJS для своего клиента и Spring MVC для своего сервера. Коллега разработал то же приложение, используя Backbone.js и Spring MVC. Сначала я подумал об использовании своего загрузочного проекта в качестве отправной точки. Затем я понял, что мне не нужно разрабатывать собственное мобильное приложение, а скорее адаптивное веб-приложение.
Мой коллега упомянул, что он собирается использовать RESThub в качестве отправной точки, поэтому я решил использовать JHipster как свою. Мы выделили один день на настройку наших сред с необходимыми инструментами, а затем у нашего первого всплеска возможностей было четыре часа.
Мой первый опыт с JHipster не прошел 10-минутный тест . Я потратил много времени на различные команды «npm» и «yo», получая проблемы с разрешениями. После того , как я подумал, что нужно поработать с некоторыми действиями sudo , я решил попробовать среду разработки Docker . Этот опыт был не лучше.
JHipster кажется хорошим проектом, поэтому я решил попытаться выяснить причины своих проблем. Эта статья предназначена для того, чтобы избавить вас от боли, которую я испытывал. Если вы хотите просто увидеть шаги, чтобы быстро приступить к работе, перейдите к сводке .
Проблемы «npm» и «yo», которые, как мне казалось, были вызваны неправильной установкой node / npm. Чтобы это исправить, я удалил узел и установил nvm . Вот команды, которые мне нужны для удаления узла и npm:
sudo rm -rf /usr/local/lib/node_modules sudo rm -rf /usr/local/include/node sudo rm /usr/local/bin/node sudo rm -rf /usr/local/bin/npm sudo rm /usr/local/share/man/man1/node.1 sudo rm -rf /usr/local/lib/dtrace/node.d sudo rm -rf ~/.npm
Затем я побежал «доктор варево», чтобы убедиться, что доморощенный все еще был счастлив. Он сказал мне, что некоторые вещи были сломаны:
$ brew doctor Warning: Broken symlinks were found. Remove them with `brew prune`: /usr/local/bin/yo /usr/local/bin/ionic /usr/local/bin/grunt /usr/local/bin/bower
Я побежал brew update && brew prune
, а затем brew install nvm
. Затем я добавил следующее в мой ~ / .profile:
source $(brew --prefix nvm)/nvm.sh
Чтобы установить последнюю версию узла, я запустил следующие команды и установил последнюю версию по умолчанию:
nvm ls-remote nvm install v0.11.13 nvm alias default v0.11.13
Получив свежую версию Node.js, я смог запустить инструкции по локальной установке JHipster .
npm install -g yo npm install -g generator-jhipster
Затем я создал свой проект:
yo jhipster
Я был разочарован, обнаружив, что это создало все файлы проекта в моем текущем каталоге, а не в подкаталоге. Я бы порекомендовал вам сделать следующее:
mkdir ~/projectname && cd ~/projectname && yo jhipster
Перед созданием вашего проекта JHipster задает вам ряд вопросов. Чтобы увидеть, что они есть, смотрите документацию по созданию приложения . Две вещи, о которых нужно знать:
- Горячая перезагрузка Java-кода не работает (пока) с Java 8
- Его реализация OAuth2 не работает с WebSockets
Другими словами, я бы рекомендовал использовать Java 7 + (аутентификация на основе файлов cookie с веб-сокетами) или (аутентификация oauth2 без веб-сокетов).
После создания проекта я смог запустить его с помощью «mvn spring-boot: run» и просмотреть его по адресу http: // localhost: 8080 . Чтобы получить горячую перезагрузку для клиента, я запустил сервер grunt и открыл свой браузер по адресу http: // localhost: 9000 .
JHipster + Docker на OS X
Мне не повезло заставить инструкции Docker работать изначально. Я потратил пару часов на это, затем сдался. Пару дней назад я решил попробовать еще раз в колледже . Чтобы убедиться, что я все понял с нуля, я начал с удаления Docker .
Я переустановил Docker и вытащил образ JHipster, используя следующее:
sudo docker pull jdubois/jhipster-docker
Ошибка, которую я получил от этого, была следующей:
2014/09/05 19:43:38 Post http:///var/run/docker.sock/images/create?fromImage=jdubois%2Fjhipster-docker&tag=: dial unix /var/run/docker.sock: no such file or directory
Проведя некоторое исследование, я понял, что мне нужно бежать boot2docker init
первым. Затем я побежал, boot2docker up
чтобы запустить демон Docker. Затем я скопировал / вставил «export DOCKER_HOST = tcp: //192.168.59.103: 2375» в мою консоль и попытался docker pull
снова запустить .
Не удалось с той же ошибкой. Решение было проще, чем вы думаете: не используйте sudo
.
$ docker pull jdubois/jhipster-docker Pulling repository jdubois/jhipster-docker 01bdc74025db: Pulling dependent layers 511136ea3c5a: Download complete ...
Следующая команда, которую рекомендует документация JHipster, — это запуск образа Docker, переадресация портов и общих папок. Когда вы запускаете его, терминал, кажется, зависает, и попытка ssh в него не работает. Другие недавно сообщили о подобной проблеме . Я обнаружил, что зависание вызвано отсутствием параметра «-d», и ssh не работает, потому что вам нужно добавить карту порта в виртуальную машину, чтобы открыть порт для вашего хоста . Вы можете исправить это, выполнив следующее:
boot2docker down VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,4022,,4022" VBoxManage modifyvm "boot2docker-vm" --natpf1 "containertomcat,tcp,,8080,,8080" VBoxManage modifyvm "boot2docker-vm" --natpf1 "containergruntserver,tcp,,9000,,9000" VBoxManage modifyvm "boot2docker-vm" --natpf1 "containergruntreload,tcp,,35729,,35729" boot2docker start
После внесения этих изменений я смог запустить образ и вставить в него ssh.
docker run -d -v ~/jhipster:/jhipster -p 8080:8080 -p 9000:9000 -p 35729:35729 -p 4022:22 -t jdubois/jhipster-docker ssh -p 4022 jhipster@localhost
Я попытался создать новый проект в VM ( cd /jhipster && yo jhipster
), но он потерпел неудачу со следующей ошибкой:
/usr/lib/node_modules/generator-jhipster/node_modules/yeoman-generator/node_modules/mkdirp/index.js:89 throw err0; ^ Error: EACCES, permission denied '/jhipster/src'
Исправление дало «jhipster» пользователю право собственности на каталог.
sudo chown jhipster /jhipster
После этого я смог сгенерировать приложение и запустить его с помощью «mvn spring-boot: run» и получить доступ к нему с моего Mac по адресу http: // localhost: 8080 . Я также смог запустить «Grunt Server» и посмотреть его на http: // localhost: 9000
Однако я был озадачен тем, что в моем каталоге ~ / jhipster ничего нет. После выполнения некоторых поисков, я обнаружил , что Докер запустить -v / хост / путь: / контейнер / путь не работает на OS X .
A Better Boot2Docker от David Gageot на OSX привел меня к svendowideit / samba , который решил эту проблему. Подробности описаны в разделе общего доступа к папке в boot2docker .
Я закрываю свой докер-контейнер, запуская «docker ps», получая первые два символа идентификатора и затем выполняя:
docker stop [2chars]
Я запустил контейнер JHipster без параметра -v, использовал «docker ps», чтобы найти его имя ( в данном случае backstabbing_galileo ), а затем использовал его для добавления поддержки samba.
docker run -d -p 8080:8080 -p 9000:9000 -p 35729:35729 -p 4022:22 -t jdubois/jhipster-docker docker run --rm -v /usr/local/bin/docker:/docker -v /var/run/docker.sock:/docker.sock svendowideit/samba backstabbing_galileo
Затем я смог подключиться, используя Finder> Go> Connect to Server, используя следующее для адреса сервера:
cifs://192.168.59.103/jhipster
Чтобы этот том появился в моей обычной области разработки, я создал символическую ссылку:
ln -s /Volumes/jhipster ~/dev/jhipster
После этого все файлы были помечены как доступные только для чтения. Чтобы исправить, я запустил «chmod -R 777». в каталоге на сервере. Я заметил, что это также сработало, если я запустил его с терминала моего Mac, но потребовалось много времени, чтобы пройти все файлы. Я заметил похожую задержку при загрузке проекта в IntelliJ.
Резюме
Уф! Это много информации, которая может быть сведена к четырем советам по JHipster + Docker для OS X.
- Убедитесь, что ваша установка npm не требует прав sudo. Если это так, переустановите с помощью nvm.
- Добавьте портмапы к вашей виртуальной машине, чтобы предоставить порты 4022, 8080, 9000 и 35729 вашему хосту.
- Смените владельца на / jhipster в образе Docker: sudo chown jhipster / jhipster.
- Используйте svendowideit / samba для совместного использования каталогов вашей виртуальной машины с OS X.