尝试使用ruby rake任务上传文件

时间:2012-06-01 17:23:08

标签: ruby-on-rails-3 file-io spree rake-task

所以我在Ruby on Rails中使用Spree作为我的购物车。 Spree是版本1-1稳定版,Ruby版本是v1.9.3,Ruby on Rails版本是v3.2.3。

我有一个远程主机,其中包含我要为我的Spree购物车下载的图像。这是我用来拉它的代码。其中一些可能没有意义,因为我正在尽我所能让它工作,所以它可以使用一点清洁。

# 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

但我得到的错误是“没有这样的文件或目录 - / public / prod_images / 29”并且它引用了那里的“Dir.mkdir”行。但是,我手动创建此目录以尝试使其工作。在我的例外救援中,我打印出工作目录,这是我机器上的应用程序的基本目录。 (我在localhost atm上运行它。)

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

1 个答案:

答案 0 :(得分:0)

我对RubyMine并不熟悉。但请放心,这不是关于路线的。它不是特定于Rails的。它是Ruby(和OS)特有的,因为Dir.mkdir是标准Ruby库的一部分。只需删除路径中的前导/,看它是否有效。 (那么,实际路径将是{您的Rails应用程序的根目录} / public / prod_images