2012-11-13 170 views
1

我需要從數據庫表生成所有我的產品到XML文件。因爲我的應用程序在Heroku上運行,所以我需要使用Amazon S3作爲存儲。Rails - 如何創建文件(XML)並將其保存到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控制器

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

的動作(比如create_xml_feed),但來這裏的問題 - 我不知道,如何保存新創建的文件到Amazon S3的桶。

我會很感激每一個進步,謝謝

回答

5

首先,創建活動記錄類來保存您上傳的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 
+0

謝謝你的回答,Nakort。我試圖實現它,但是在保存文件時出現了錯誤 - 對於#',未定義的方法'uploaded_file ='。我運行代碼,如'XmlUploader.create_uploaded_file()'。你能給我一個關於如何解決它的提示嗎?謝謝 – user984621

+0

你需要創建一個XmlUploader類的實例,我會更新答案。 ' – Nakort

+0

對於另一個問題 - 這個'xml_file = XmlUploader.new xml_file.create_uploaded文件'應該在控制器的操作中,我很抱歉?當我把它放在那裏並運行代碼時,我得到#的'未定義的局部變量或方法文件'。對不起,我只是有點困惑......謝謝。 – user984621

相關問題