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

时间:2014-11-07 12:53:29

标签: java ruby-on-rails postgresql

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

问题是,考虑到我的Java应用程序完全分开RoR应用程序,有没有办法执行rails console命令而不是执行那些SQL查询?如果您需要知道,我使用的是rails 4.

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

2 个答案:

答案 0 :(得分:0)

我认为这根本不是一个好主意。但是如果java应用程序连接到运行RoR的同一台机器,则可以实现此目的。然后您可以使用rails runner或者您可以执行一些rake任务。 rails runner的使用非常简单,请参阅http://guides.rubyonrails.org/command_line.html#rails-runner

的官方文档中的这个示例
$ bin/rails runner -e staging "Model.long_running_method"

答案 1 :(得分:0)

我按照@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());

处理需要几秒钟,因为它正在做某事,但产品本身没有变化。我直接在终端尝试了这个命令,效果很好。

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

感谢您的时间。