Выполнить jar из приложения rails с параметрами и получить ответные данные обратно в rails

1

Привет, мне нужно выполнить JAR, когда пользователь нажимает кнопку из приложения rails, а затем выдает строковое представление некоторых данных, выполненных каким-то методом в банке, и показывает их на вид веб-страницы. Я вижу много ответов здесь и там, но ничего конкретного...

  1. Как будет обрабатываться выход JAR? В качестве примера можно использовать запись в стандартный вывод с использованием System.out.print("data things"+"and another data"+"and some 3rd data")

  2. Если да, то как рельсы-рубины собирают этот поток данных? Пожалуйста, предоставьте скрипт rails для полного noob...

Теги:
jar

2 ответа

1

Это скорее рубиновый вопрос, чем вопрос рельсов: все здесь прямо рубин.

Вы можете вызвать любую команду в оболочке с обратными шагами, и вы получите результат stdout в строке в качестве возвращаемого значения. например, в моей консоли.

irb(main):035:0> myvar = 'ls -l'
=> "total 688\ndrwxr-xr-x  6 max max   4096 Jul 26  2011 app\n-rw-r--r--  1 max max    173 Aug 17  2011 Capfile\ndrwxr-xr-x  9 max max   4096 Jun 10 14:35 config\ndrwxr-xr-x  4 max max   4096 May  8 09:37 db\n-rw-r--r--  1 max max   2914 May  8 09:37 default.gems\ndrwxr-xr-x  5 max max   4096 May 16  2012 doc\n-rw-r--r--  1 max max    271 Apr 22 16:04 elearning.tm_properties\n-rw-r--r--  1 max max      0 Aug 17  2011 favicon.ico\ndrwxr-xr-x  8 max max   4096 Nov 28  2013 features\ndrwxr-xr-x  8 max max   4096 Nov 23  2012 index\n-rw-r--r--  1 max max 614404 May  8 09:37 less\ndrwxr-xr-x  6 max max   4096 Jun 10 16:02 lib\ndrwxr-xr-x  3 max max   4096 May 29  2013 log\ndrwxr-xr-x 31 max max   4096 Jun  5 13:14 public\n-rw-r--r--  1 max max    307 Jan 22  2013 Rakefile\n-rw-r--r--  1 max max      4 May  8 09:37 README\n-rw-r--r--  1 max max    188 Aug 17  2011 README_JAY\ndrwxr-xr-x 10 max max   4096 May  9 12:51 script\ndrwxr-xr-x  6 max max   4096 Apr 22 16:04 spec\ndrwxr-xr-x  2 max max   4096 Aug 17  2011 stories\ndrwxr-xr-x  5 max max   4096 Nov 22  2013 test\ndrwxr-xr-x  8 max max   4096 May 29 11:04 tmp\ndrwxr-xr-x  4 max max   4096 Jul 26  2011 vendor\n"
irb(main):036:0> puts myvar
total 688
drwxr-xr-x  6 max max   4096 Jul 26  2011 app
-rw-r--r--  1 max max    173 Aug 17  2011 Capfile
drwxr-xr-x  9 max max   4096 Jun 10 14:35 config
drwxr-xr-x  4 max max   4096 May  8 09:37 db
...etc

Итак, вы запустите свою банку, разработав то, что вы положили бы на терминал, чтобы запустить банку, а затем просто поместив это в backticks в своем приложении. Если вы используете выходы jar в stdout, вы получите это обратно в результате выполнения команды.

Я не могу дать вам пример, использующий ваши вещи "данных", поскольку я не понимаю, что вы пытаетесь сделать там.

EDIT: кстати, вы можете использовать синтаксис оценки строки #{} в тексте backticks, который позволяет вам создавать динамически созданные команды оболочки. например

folder = "#{ENV['HOME']}/Downloads"
my_downloads = 'ls #{folder}'.split("\n")
  • 0
    спасибо за ответ
1

У меня был проект, в котором я должен был работать над этим, не так давно. То, как мы обрабатывали связь между ними, было использование HTTPClient. Rails полностью принадлежит серверу, и файл jar, скорее всего, будет выполняться локально, поэтому у вас должен быть посредник между ними, в который входит HTTPClient.

Если вы не хотите использовать HTTPClient (что может быть проще), вы также можете делать то, что делали эти парни, которые использовали java.net.HttpURLConnection и запускали с этим.

Надеюсь, это поможет :)

  • 0
    Я не вижу в этом вопросе ничего, что бы указывало на то, что файл jar находится не в том же окне, что и приложение rails.
  • 0
    Справедливо. Я сделал предположение, что файл JAR будет выполняться локально. В любом случае HTTPClient будет работать как HttpURLConnection. Просто будьте разными URL
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню