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