File.write不会写

时间:2015-09-24 03:21:09

标签: ruby file

我正在享受一个非常有趣的问题,其中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\"}"

但循环中没有任何东西似乎可以做任何事情。

1 个答案:

答案 0 :(得分:1)

看起来shared_resources文件夹不存在。第一个片段直接在现有file_path中写入,而第二个片段尝试写入子文件夹。在file_path已定义:

之后,请执行以下操作
Dir.mkdir File.join file_path, 'shared_resources' # unless exists?