2012-06-01 28 views
0

所以我使用的施普雷在Ruby on Rails的我的购物车的文件。 Spree版本为1-1稳定,Ruby为v1.9.3,Ruby on Rails为v3.2.3。试图上传使用红宝石rake任务

我有了,我想下载我的盛宴车图像的远程主机。这是我用来拉它的代码。其中的一些可能没有意义,因为我正在尽一切努力使这项工作有效,因此可以使用一点清洁。

# Add image to the product 
     vendor_id = plink_and_pull(item, "VendorID") 
     image_name = plink_and_pull(item, "ImageName") 
     # TODO: add if image exists to this unless 
     unless image_name.nil? || vendor_id.nil? || plink_and_pull(item, "ImageFound").to_i == 0 || File.exists?("/public/prod_images/#{vendor_id}/#{image_name.gsub(' ', '%20')}") 
      unless Dir.exists? "/public/prod_images/#{vendor_id}" 
       Dir.mkdir("/public/prod_images/#{vendor_id}", 777) 
      end 
      file = File.new("public/prod_images/#{vendor_id}/#{image_name.gsub(' ', '%20')}", 'w+') 
      file.binmode 

      open(URI.parse("http://login.xolights.com/vendors/#{vendor_id}/large/#{image_name.gsub(' ', '%20')}")) do |data| 
       file.write data.read 
      end 
      img = Spree::Image.create({:attachment => "public/prod_images/#{vendor_id}/#{image_name}", 
             :viewable => product}, :without_protection => true) 
     end 

但我得到的错误说:“没有这样的文件或目录 - /公/ prod_images/29”,它引用了“Dir.mkdir”排队在那里。但是,我手动创建了这个目录,试图让它工作。在我的例外救援中,我打印出了工作目录,这是我的机器上的应用程序的基础目录。 (我在本地主机上运行的ATM此。)

我想,也许我需要做的东西在我的routes.rb文件?但我在Ruby on Rails路线上是这样的新手,我不知道从哪里开始......或者即使这是这里的问题。

+0

你打造“/公/ prod_images /”或“公共/ prod_images /?”(注意,第一个是在根下,这是很少一个好主意) – Salil

+0

对不起,我要澄清。:) 我得到这个错误我创建的目录(太之后)之前,我只是想验证实际的文件上传是工作,所以在我在RubyMine中的GUI直接右键单击并创建/ prod_images和/ 29。 :) – melissanoelle

+0

我不熟悉RubyMine。但请放心,这不是路线。这不是Rails特有的。它是Ruby(和OS)特有的,因为Dir.mkdir是标准Ruby库的一部分。只要删除前导/从路径,看看它是否工作。 (所以,实际的路径将是{你的Rails应用程序的根目录}/public/prod_images – Salil

回答

0

我不是那个熟悉的RubyMine。但请放心,这不是路线。这不是Rails特有的。它是Ruby(和OS)特有的,因为Dir.mkdir是标准Ruby库的一部分。只要删除前导/从路径,看看它是否工作。 (所以,实际的路径将是{您的Rails应用程序的根目录} /公/ prod_images