Статьи

Начало работы с JHipster на OS X

На прошлой неделе мне было поручено разработать быстрый прототип, который использовал 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 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.

  1. Убедитесь, что ваша установка npm не требует прав sudo. Если это так, переустановите с помощью nvm.
  2. Добавьте портмапы к вашей виртуальной машине, чтобы предоставить порты 4022, 8080, 9000 и 35729 вашему хосту.
  3. Смените владельца на / jhipster в образе Docker: sudo chown jhipster / jhipster.
  4. Используйте svendowideit / samba для совместного использования каталогов вашей виртуальной машины с OS X.