Перезагрузить классы через ssh на сервере jrebel tomcat с запуском intellij

У меня есть сервер JRebel+Tomcat, работающий через IntelliJ на моем рабочем (*NIX) компьютере, и иногда мне бы хотелось, чтобы JRebel обновлял классы/ресурсы, когда я нахожусь на своем домашнем (*NIX) компьютере, удаленно подключенном через SSH.

e.g.

home $ ssh work
work $ cd workspace/foo/bar/baz
work $ hey-jrebel-go-update-classes

Сегодня я справляюсь с этим, подключаясь к моей рабочей машине с помощью VNC, затем в IntelliJ выполняю «Обновить классы и ресурсы» на моем работающем экземпляре Tomcat, а затем снова выхожу из системы.

Это довольно глупо, так как я уже подключен по SSH. Есть ли способ запустить этот процесс через командную строку?


person inanutshellus    schedule 23.04.2014    source источник


Ответы (2)


JRebel имеет средство удаленного взаимодействия, которое можно использовать для синхронизации изменений через HTTP с удаленным компьютером. Для этого необходимо включить JRebel на удаленном Tomcat (через -javaagent:jrebel.jar) и включить удаленный подключаемый модуль JRebel, который создает конечную точку HTTP для согласования с подключаемым модулем IDE. -Drebel.remoting_plugin=true подойдет.

Для получения дополнительной информации вы можете проверить учебник для настройка удаленного взаимодействия с IntelliJ IDEA и Tomcat.

В противном случае, без включения удаленного взаимодействия, вы можете развернуть приложение с конфигурационным файлом rein.xml, который будет указывать на место, где находится взорванное приложение, и JRebel заставит Tomcat загружать ресурсы из этого конкретного места, поэтому вы можете просто синхронизироваться с IntelliJ в это удаленное место через SSH. Затем JRebel будет работать как обычно — отслеживая изменения в указанном месте и перезагружая классы/ресурсы, как только они используются в приложении.

person Anton Arhipov    schedule 23.04.2014
comment
Я изменил свой ответ, чтобы быть более ясным. IntelliJ/Tomcat/JRebel работают вместе на моей рабочей машине, и я сижу дома, подключаюсь по SSH. Текущая настройка действительно использует повстанческий.xml, но изменения класса не распространяются автоматически. Возможно, я не вижу конфигурационного параметра в файле relay.xml. - person inanutshellus; 23.04.2014
comment
В этом случае было бы лучше включить ведение журнала JRebel на рабочей машине и проверить, действительно ли JRebel что-либо отслеживает. Вы можете отправить файл журнала в службу поддержки JRebel, и они помогут вам с этим. - person Anton Arhipov; 24.04.2014
comment
Похоже, JRebel сейчас поступает правильно. Это означает, что в IntelliJ я явно говорю ему обновить Tomcat (ctrl/cmd-f10) — он не просто развертывается каждый раз, когда я сохраняю файл. Так что в этом случае, поскольку я нахожусь в сеансе терминала bash, а не в графическом интерфейсе MacOS, я не знаю, как сказать JRebel ok, /now/go update. - person inanutshellus; 25.04.2014
comment
Нет такой функциональности, чтобы указать JRebel обновить ресурсы. JRebel лениво применяет изменения в соответствии с семантикой Java. Это означает, что как только класс будет использоваться внутри приложения, JRebel проверит отметку времени класса в том месте, откуда он был загружен. В случае удаленного взаимодействия скажите, пожалуйста, синхронизируйте, а плагин IDE только копирует файлы на удаленный хост в правильный каталог, вот и все. Остальное зависит от агента, чтобы понять, что ресурс обновлен. - person Anton Arhipov; 25.04.2014
comment
Наконец-то я понял, что я делаю неправильно - JRebel просто не поддерживает то, как мы подключили нашу ORM, поэтому мне приходится фактически перезапускать сервер, а не обновлять классы. - person inanutshellus; 26.04.2014

Я не совсем понимаю, что вы пытаетесь сделать. Но если я последую, вы в основном хотите отправить команду на удаленный сервер через SSH и, в идеале, запустить ее из IntelliJ IDEA. Вы можете:

  1. Используйте окно терминала (Инструменты > Открыть терминал), запустите соединение ssh, а затем введите команду вручную.
  2. Create an External Tool definition that uses plink (or an equivalent) to execute the ssh command to your remote server. You can create an External Tool Definition in Settings > [IDE Settings] > External Tools. See the screenshot below for an example. The definition (or its group if using groups to add structure to your definitions) will appear on the Tool menu. You can also map a shortcut to it via Settings > [IDE Settings] > Keymap > External Tools. For a multiple command sequence, you can either
    • write a local script that does it and use the External Tool definition to launch the script
    • написать удаленный скрипт и использовать plink в определении внешнего инструмента для его запуска
    • поместите команды для запуска в локальный файл и используйте plink -m {file} для их запуска.

введите здесь описание изображения

person Javaru    schedule 23.04.2014