gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:58 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com