2013-09-25 4 views
0

У меня есть класс, называемый «Отчет», и «Отчеты» генерируются с помощью задачи «Рейк». Я также использую Paperclip для изображений (пользовательские аватары), и он загружается в мой ведро S3. Вот вершина отчета модели:Скрепка одного типа приложения не загружается на S3, другие?

require 'csv' 
class Report < ActiveRecord::Base 
    attr_accessible :csv_file, :category 

    Paperclip.interpolates :category do |attachment, style| 
    attachment.instance.category.downcase 
    end 

    has_attached_file :csv_file, 
    path: (Rails.env.staging? || Rails.env.production?) ? ":class/:category/:basename.:extension" : ":rails_root/public/system/:class/:category/:basename.:extension" 

И мой Paperclip.rb файл следующим образом:

Paperclip.options[:log] = false 
Paperclip.options[:command_path] = if Rails.env.dev? 
    "/usr/local/bin" 
else 
    "/usr/bin" 
end 

PAPERCLIP_OPTIONS = { 
    :hash_secret => "HASHSECRETHERE", 
    :default_url => "http://placehold.it/:style", 
    :processors => [:thumbnail] 
} 

PAPERCLIP_STORAGE_OPTIONS = if Rails.env.staging? || Rails.env.production? 
    { :storage => :s3, 
    :s3_credentials => "#{Rails.root}/config/apis/s3.yml", 
    :s3_permissions => :public_read, 
    :s3_protocol => :https, 
    :path => ":class/:attachment/:id_partition/:style/:hash.:extension" } 
else 
    { :path => ":rails_root/public/system/:class/:attachment/:id_partition/:style/:hash.:extension", 
    :url => "/system/:class/:attachment/:id_partition/:style/:hash.:extension" } 
end 

PAPERCLIP_OPTIONS.merge!(PAPERCLIP_STORAGE_OPTIONS) 

Она сохраняет отчеты:

/system/reports/csv_files/000/000/002/original/general-report-2013-9-25-T-3-56-PM.csv?1380142571

, а не S3 как и мои аватары:

//s3.amazonaws.com/production/media/avatar-placeholder.gif

Кто-нибудь может понять почему?

ответ

0

Я думаю, что среда не имеет RAILS_ENV (или RACK_ENV) множество, так что ваша rake задача запускается в development среде, которая не сохраняет в s3 из-за этой линии:

PAPERCLIP_STORAGE_OPTIONS = if Rails.env.staging? || Rails.env.production? 

Вы, вероятно, хотите, чтобы запустить rake задачу так:

RAILS_ENV=production rake do_some_thing 
+0

Окружающая среда была установлена, параметры были просто переопределены, поэтому, чтобы исправить это, мне пришлось объединить путь. – trevorhinesley

0

Fixed его путем объединения вариантов в PAPERCLIP_OPTIONS так:

has_attached_file :csv_file, PAPERCLIP_OPTIONS.merge(
    path: (Rails.env.staging? || Rails.env.production?) ? ":class/:category/:basename.:extension" : ":rails_root/public/system/:class/:category/:basename.:extension", 
    processors: [] 
) 
Смежные вопросы