Привет, мне нужно выполнить JAR, когда пользователь нажимает кнопку из приложения rails, а затем выдает строковое представление некоторых данных, выполненных каким-то методом в банке, и показывает их на вид веб-страницы. Я вижу много ответов здесь и там, но ничего конкретного...
Как будет обрабатываться выход JAR? В качестве примера можно использовать запись в стандартный вывод с использованием System.out.print("data things"+"and another data"+"and some 3rd data")
Если да, то как рельсы-рубины собирают этот поток данных? Пожалуйста, предоставьте скрипт rails для полного noob...
Это скорее рубиновый вопрос, чем вопрос рельсов: все здесь прямо рубин.
Вы можете вызвать любую команду в оболочке с обратными шагами, и вы получите результат 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")
У меня был проект, в котором я должен был работать над этим, не так давно. То, как мы обрабатывали связь между ними, было использование HTTPClient. Rails полностью принадлежит серверу, и файл jar, скорее всего, будет выполняться локально, поэтому у вас должен быть посредник между ними, в который входит HTTPClient.
Если вы не хотите использовать HTTPClient (что может быть проще), вы также можете делать то, что делали эти парни, которые использовали java.net.HttpURLConnection
и запускали с этим.
Надеюсь, это поможет :)