我是 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/