Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java应用程序执行外部rails项目命令_Java_Ruby On Rails_Postgresql - Fatal编程技术网

从Java应用程序执行外部rails项目命令

从Java应用程序执行外部rails项目命令,java,ruby-on-rails,postgresql,Java,Ruby On Rails,Postgresql,我正在开发一个用不同语言连接不同平台的大型系统。其中两个平台是RoR网站和Java应用程序,其任务是将数据(无论从何处)插入RoR PostgreSQL数据库。目前,我正在使用简单的SQL查询来插入,例如,一个产品。这是正确的,但是,我不能利用框架中包含的工具,如时间戳和模型回调 问题是,考虑到我的Java应用程序完全与RoR应用程序分开运行,有没有一种方法可以执行rails控制台命令,而不是执行那些SQL查询?如果你需要知道,我使用的是rails 4 请原谅我的英语,并提前谢谢你。我认为这根本

我正在开发一个用不同语言连接不同平台的大型系统。其中两个平台是RoR网站和Java应用程序,其任务是将数据(无论从何处)插入RoR PostgreSQL数据库。目前,我正在使用简单的SQL查询来插入,例如,一个产品。这是正确的,但是,我不能利用框架中包含的工具,如时间戳和模型回调

问题是,考虑到我的Java应用程序完全与RoR应用程序分开运行,有没有一种方法可以执行rails控制台命令,而不是执行那些SQL查询?如果你需要知道,我使用的是rails 4


请原谅我的英语,并提前谢谢你。

我认为这根本不是一个好主意。但是,如果java应用程序连接到RoR正在运行的同一台机器,则可以实现这一点。然后可以使用rails runner,也可以执行一些rake任务。rails runner的使用非常简单,请查看来自


我按照@IvanT的建议做了,但是尽管有各种各样的方法,我还是无法让它工作,以下是我尝试过的代码之一:

String railsCmd = "Product.where(:category_id => 9).each { |p| p.update_attribute(:brand, 'NO BRAND') }";
String wholeCommand = "rails runner -e development \"" + railsCmd + "\"";

StringBuilder output = new StringBuilder();
Process p = Runtime.getRuntime().exec(wholeCommand, null, new File("/path/to/rails/project/bin"));
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;            
while ((line = reader.readLine())!= null) {
    output.append(line).append("\n");
}
System.out.println(output.toString());
处理过程需要几秒钟,因为它正在做一些事情,但产品本身没有变化。我在终端直接尝试了这个命令,效果很好

我也想知道你为什么认为这不是个好主意

谢谢你抽出时间

String railsCmd = "Product.where(:category_id => 9).each { |p| p.update_attribute(:brand, 'NO BRAND') }";
String wholeCommand = "rails runner -e development \"" + railsCmd + "\"";

StringBuilder output = new StringBuilder();
Process p = Runtime.getRuntime().exec(wholeCommand, null, new File("/path/to/rails/project/bin"));
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;            
while ((line = reader.readLine())!= null) {
    output.append(line).append("\n");
}
System.out.println(output.toString());