这是我在模型中所做的:
:after_save after_save
def after_save
self.delay.do_thing
end
def do_thing
Dir.mkdir("#{Rails.root}/my/path")
system("cd #{Rails.root}/my/path && wget -with-some-flags")
end
这在开发中完美无缺。但是,在生产中,什么都没有发生。没有错误,什么都没有。
我检查了几件事,例如:
- 在运行之前将命令发送到日志以确保它实际上是正确构建的
- 手动运行命令以检查它是否正常工作
- 打开一个生产 Rails shell 并执行
myobject.do_thing
,这也有效! - 在反引号和命令之间切换
system()
,以检查它是否与子外壳有关 - 添加绝对命令路径,例如
/usr/bin/wget
,它也适用于命令行,但不适用于 Web 浏览器。 - 检查它保存到的文件夹的权限
我知道该do_thing
方法正在运行,因为它还在 do 的过程中创建了一个文件夹,该文件夹thing
确实出现在文件系统中,而不是 wget 的结果。
我真的被难住了。有任何想法吗?