我正在享受一个非常有趣的问题,其中File.write...
仅偶尔起作用,即看似在该方法的 end 时。出于一些奇怪的原因,这是有效的:
def update(id)
r = HTTParty.get("#{user_api_url}/#{id}?token=#{token}").parsed_response
file_path = "/Users/#{server_user}/server/resources/users/"
File.write("#{file_path}#{id}#{extension(r['user_file_name'])}", open("#{r['user_url']}").read, { mode: 'wb' })
File.write("#{file_path}#{id}_logo#{extension(r['logo_file_name'])}", open("#{r['user_logo_url']}").read, { mode: 'wb' })
end
这并不是:
def update(id)
r = HTTParty.get("#{user_api_url}/#{id}?token=#{token}").parsed_response
file_path = "/Users/#{server_user}/server/resources/users/"
r['shared_resources'].map do |key, value|
file = "#{file_path}shared_resources/#{value.split('/')[-1]}"
p "#{timestamp}: Saving #{key} from #{api_server}#{value} into #{file}"
File.write(file, open("#{api_server}#{value}").read, mode: 'wb')
end
File.write("#{file_path}#{id}#{extension(r['user_file_name'])}", open("#{r['user_url']}").read, mode: 'wb')
File.write("#{file_path}#{id}_logo#{extension(r['logo_file_name'])}", open("#{r['user_logo_url']}").read, mode: 'wb')
end
第二种方法根本不会产生任何错误,但不会写入任何文件。路径和URL都是正确的。让我觉得我没有正确地打开或关闭某些东西,但我不知道是什么。有什么想法吗?
更新
出现此错误:
Errno::ENOENT: No such file or directory @ rb_sysopen - /Users/user123/server/resources/users/shared_resources/cqap_logo_cmyk-6a82ebd2e336c92188a58cacf26792cf9f43b6d296ae51c2b3fe...
这是来自循环中的File.write。
更新2
r['shared_resources']
输出:
{\"logo\"=>\"/assets/server/user123-6a82ebd2e336c92188a58cacf26792cf9f43b6d296ae51c2b3fe05a0c1802794.jpg\"}"
但循环中没有任何东西似乎可以做任何事情。
答案 0 :(得分:1)
看起来shared_resources
文件夹不存在。第一个片段直接在现有file_path
中写入,而第二个片段尝试写入子文件夹。在file_path
已定义:
Dir.mkdir File.join file_path, 'shared_resources' # unless exists?