Загрузка в Rackspace Cloud Files со скрепкой и туманом

Не могу понять, как это сделать? и не мог найти много помощи от где-либо еще!

Я установил скрепку и туман вот так;

config/initializers/fog.rb

     connection = Fog::Storage.new({
       :provider           => 'Rackspace',
       :rackspace_username => '',
       :rackspace_api_key  => ''
     })

среда.рб;

    Paperclip::Attachment.default_options.update({
    :path             => ":attachment/:id/:timestamp_:style.:extension",
    :storage          => :fog,
    :fog_credentials  => {
      :provider           => 'Rackspace',
      :rackspace_username => '',
      :rackspace_api_key  => '',
      :persistent         => false
    },
    :fog_directory    => '',
    :fog_public       => true

})

Я использую file_field для получения изображения, а затем отправляю его на свой контроллер. Это вызывает у меня что-то вроде этого;

"pic"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007f90ac06a6c8 @original_filename="3245-1920x1200.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"cloth[pic][image]\"; filename=\"3245-1920x1200.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/tmp/RackMultipart20130104-5386-103laem>>}

Чего я не могу понять, так это того, как мне сохранить этот файл в облачных файлах, используя что-то вроде этого;

file = directory.files.create(
  :key    => 'resume.html',
  :body   => File.open("/path/to/my/resume.html"),
  :public => true
)

ИЗМЕНИТЬ

Соответствующие модели;

class Cloth
  include Mongoid::Document
  has_many :pics

class Pic
  include Mongoid::Document
  include Mongoid::Paperclip
    belongs_to :cloth

    has_mongoid_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }

И в контроллере я сейчас создаю изображение на основе вышеуказанных параметров;

@cloth = Cloth.new
@cloth.pics.create!(params[:cloth][:pic])

person Shakeeb Ahmad    schedule 04.01.2013    source источник


Ответы (2)


Давайте сделаем шаг назад и посмотрим на проблему с другой точки зрения. Можете ли вы увидеть, загрузит ли следующий скрипт изображение в ваш контейнер:

require 'fog'
service = Fog::Storage.new({
  :provider                 => 'Rackspace',
  :rackspace_username        => YOUR_USERNAME,
  :rackspace_api_key    => YOUR_API_KEY
  })

container = service.directories.new(:key => YOUR_CONTAINER_NAME)
container.files.create :key => 'my-pix.jpg', :body => File.open PATH_TO_FILE

Обновите параметры в верхнем регистре соответствующими переменными и дайте мне знать, что произойдет. Надеюсь, это поможет сузить проблему.

person Kyle Rames    schedule 07.01.2013
comment
ПОНЯТНО! Регион моего контейнера был «Чикаго», удалил его, создал новый контейнер в «Далласе», и все заработало нормально. Судя по всему: github.com/fog/fog/issues/1135 никто не исправил это все же. Уф, чуть не свел меня с ума, этот. Спасибо чувак! - person Shakeeb Ahmad; 08.01.2013
comment
Рад это слышать! Просто совет: если вы используете облачные серверы с облачными файлами, вам следует использовать один и тот же центр обработки данных, чтобы сократить свои расходы. - person Kyle Rames; 08.01.2013
comment
Принятие этого как ответа, потому что заставило меня задуматься о регионах, поскольку он не мог найти каталог! - person Shakeeb Ahmad; 10.01.2013
comment
Последняя версия Fog поддерживает указание региона службы Storage. Для получения дополнительной информации см. github.com/fog/fog/blob/master/lib/fog/rackspace/docs/ - person Kyle Rames; 05.04.2013
comment
service.directories.get работает очень медленно, поскольку возвращает избыточные данные: байты, количество. Как я могу ускорить его? - person Anatoly; 26.02.2014

Paperclip и ActiveRecord должны автоматически обрабатывать загрузку файлов. Вот хорошее краткое объяснение процесса:

https://github.com/thoughtbot/paperclip#quick-start

Если у вас все еще есть проблемы, можете ли вы предоставить мне соответствующий контроллер и код модели?

person Kyle Rames    schedule 04.01.2013
comment
обновленный код выше - и нет активной записи, и я использую 'mongoid-paperclip' gem - person Shakeeb Ahmad; 04.01.2013
comment
Получаете ли вы какие-либо исключения при выполнении кода контроллера? Он хранит что-нибудь в Mongo? - person Kyle Rames; 04.01.2013
comment
Без исключений. Он хранит это в монго: [#<Pic _id: 50e6deb5e2280d530b00006e, _type: nil, created_at: 2013-01-04 13:52:53 UTC, updated_at: 2013-01-04 13:52:53 UTC, cloth_id: "50e6deb4e2280d530b00006d", image_file_name: "3245-1920x1200.jpg", image_content_type: "image/jpeg", image_file_size: 133675, image_updated_at: 2013-01-04 13:52:52 UTC>], но не загружает в облачные файлы! - person Shakeeb Ahmad; 05.01.2013
comment
OK! теперь он выдает это исключение Fog::Storage::Rackspace::NotFound in ClothController#create и сохраняет изображения в общедоступном/системном, но не загружает их - person Shakeeb Ahmad; 07.01.2013
comment
Ах! Похоже, вы делаете некоторый прогресс. Похоже, что настройка Fog_Directory должна соответствовать контейнеру, в котором должны храниться файлы. У вас установлено это значение для имени контейнера, который вы используете? - person Kyle Rames; 07.01.2013
comment
Да! «fog_directory», «rackspace_api_key» и «rackspace_username» — все верно, проверено тысячу раз - person Shakeeb Ahmad; 07.01.2013