1

すべての製品をデータベース テーブルから 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"

これは私を少し混乱させます...このタスクのロジックがよくわからないからです。私の考えは、コントローラーでアクション(たとえばcreate_xml_feed)を実行することですProducts

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

しかし、ここで問題が発生します。新しく作成されたファイルを Amazon S3 バケットに保存する方法がわかりません。

前進するたびに感謝します、ありがとう

4

1 に答える 1

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
于 2012-11-14T00:20:17.597 に答える