【问题标题】:Rails - how to create file (XML) and save it into Amazon S3 bucket?Rails - 如何创建文件(XML)并将其保存到 Amazon S3 存储桶中?
【发布时间】:2012-11-02 09:57:51
【问题描述】:

我需要将数据库表中的所有产品生成到 XML 文件中。因为我的应用在 Heroku 上运行,所以我需要使用 Amazon S3 作为存储。

这是一个关于如何保存图像的示例:

has_attached_file :photo,
       :styles => {
       :thumb=> "100x100#",
       :small  => "400x400>" },
     :storage => :s3,
     :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
     :path => "/:style/:id/:filename"

这让我有点困惑......因为我不确定这个任务的逻辑。 我的想法是在Products 控制器中运行一个动作(比如create_xml_feed

 xml = Builder::XmlMarkup.new( :indent => 2 )
 xml.instruct! :xml, :encoding => "ASCII"
 xml.product do |p|
   p.name "Test"
 end

但问题来了 - 我不知道如何将新创建的文件保存到 Amazon S3 存储桶中。

感谢您的每一次进步,谢谢

【问题讨论】:

    标签: ruby-on-rails ruby file-upload amazon-s3 paperclip


    【解决方案1】:

    首先,创建一个活动记录类来保存您上传的 XML 文件。在此之后,您可以编写创建 xml 字符串的逻辑,通过首先创建 XmlUploader 类的新实例来创建新文件,然后创建所需的 xml 字符串,将其保存在文件中,然后将此文件分配为附件文件.保存后,您的 xml 文件将上传到 s3。

    class XmlUploader < ActiveRecord::Base
      has_attached_file :uploaded_file, :storage => :s3,
      :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
      :path => "/:id/:filename"
    
      def create_uploaded_file
        xml = ::Builder::XmlMarkup.new( :indent => 2 )
        xml.instruct! :xml, :encoding => "ASCII"
        xml.product do |p|
          p.name "Test"
        end
        file_to_upload = File.open("some-file-name", "w")     
        file_to_upload.write(xml)
        file_to_upload.close()
        self.uploaded_file = File.open("some-file-name")
        self.save!
      end
    end
    
    class CreateXmlUploaders < ActiveRecord::Migration
      def change
        create_table :xml_uploaders do |t|
          t.attachment :uploaded_file
          t.timestamps
        end
      end
    end
    
    xml_file = XmlUploader.new
    xml_file.create_uploaded_file
    

    【讨论】:

    • 感谢您的回答,纳科特。我尝试实现它,但在保存文件时出现错误 - undefined method uploaded_file=' for #<0x0000012a22f710>
    • &lt;&gt;
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2017-11-13
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多