ruby-on-rails - Ruby 中的 "system()"调用会等到它完成吗?

标签 ruby-on-rails ruby

我是 ruby​​ on rails 的新手。我想调用一个系统命令来分析我的 Rails 应用程序中上传的文件。内容如下:

after_save :analyse  #post processing call
def analyse
    command = "./c_executable " + Rails.root.to_s + "/output_csv_file"
    system(command)
    if FileTest.exists?(Rails.root.to_s + "/output_csv_file")
       parse_csv
    end
end

它在我的本地机器上运行良好,但由于某种原因,函数“parse_csv”不会在服务器 (dreamhost) 上被调用。但是,我在服务器上手动调用 c_executable 系统命令,它可以毫无问题地输出 csv 文件。谁能告诉我是什么导致了这里的问题?我在想系统调用需要一些时间才能在服务器上完成。如果是这样的话,我想知道是否有办法告诉 rails 等待 system() 调用完成执行。提前致谢!

最佳答案

系统调用应该阻塞,直到里面的命令完成。该文件可能未按您的预期创建,这可能会阻止您的应用程序的该部分运行。

您可能想使用不同的方式来构建您的路径以确保您做对了:

csv_path = File.expand_path('output_csv_file', Rails.root)

unless (system('./c_executable', csv_path))
  # Could't execute system command for some reason.
end

if (File.exists?(csv_path))
  # ...
end

在进行 system 调用时,通常最好指定可执行文件的完整路径,因为您的应用程序 PATH 可能与您预期的不同。

关于ruby-on-rails - Ruby 中的 "system()"调用会等到它完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4126538/

相关文章:

ruby-on-rails - react 新手: sharing state across unlinked components

ruby-on-rails - 在基于域的 Rails 中有条件地实现 HSTS、SSL 和安全 Cookie

ruby - ruby 中的字符串文字如何绕过 new/initialize,有没有办法对此进行检测?

ruby-on-rails - 为什么在创建 Cloudfront 发行版后 Rails 应用程序渲染无需 CSS?

mysql - has_many :through multiple joins table

ruby-on-rails - 根据模型更改 Rails 部分的查找路径

html - 在 Twitter-Bootstrap 的导航丸上覆盖悬停

ruby - 使用 mongomapper 保存日期/时间

ruby-on-rails - 未设置正则表达式全局变量

ruby - Dir[File.join(File.dirname(__FILE__), "subdirectory/**/*.rb")] 的较短版本?