2012-11-13 4 views
1

데이터베이스 테이블의 모든 제품을 XML 파일로 생성해야합니다. 내 앱이 Heroku에서 실행되기 때문에 Amazon S3를 스토리지로 사용해야합니다. 조금 혼란 나를 만드는 ... 나는이 작업의 논리에 대해 확실하지이기 때문에레일 - 파일 (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)를 실행하는 것입니다 그러나 문제는 여기에 온다 - 나는 아마존 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. 나는 그것을 구현하려했지만, 파일을 저장하는 동안 오류가 발생했다. - ''에 대해서는'undefined method'uploaded_file = '이다. 나는'XmlUploader.create_uploaded_file()'과 같은 코드를 실행한다. 그걸 고칠 방법에 대한 팁을 주실 수 있겠습니까? 고맙습니다. – user984621

+0

XmlUploader 클래스의 인스턴스를 만들어야 대답을 업데이트 할 수 있습니다. ' – Nakort

+0

다른 질문에 대해 죄송합니다.이'xml_file = XmlUploader.new xml_file.create_uploaded file'은 컨트롤러의 액션에 있어야합니까? 코드를 넣고 코드를 실행하면 # 에 대해'정의되지 않은 지역 변수 또는 메소드 파일 '이 나타납니다. 죄송합니다, 조금 혼란 스럽습니다 ... 고마워요. – user984621

관련 문제