Миграция активного хранения от локальной дисковой службы в облако GCS -- ruby-on-rails поле с участием rails-activestorage пол Связанный проблема

Migrate active storage from local disk service to gcs cloud


0
vote

проблема

русский

Я пытаюсь перенести свои локальные активные файлы хранения в Google Cloud Storage. Я пытался просто скопировать файлы /storage/* на мое ведро GCS - но кажется, что это не работает.

Я получаю 404 не найден ошибки, потому что он ищет файлы, такие как: <Код> [bucket]/variants/ptGtmNWuTE...

Мой локальный каталог хранения имеет совершенно другую структуру папки с такими папками, как: <Код> /storage/1R/3o/NWuT... .

Мой метод для получения изображения:

 <код> variant = attachment.variant(resize: '100x100').processed url_for(variant)   

Что я здесь не хватает?

Английский оригинал

I'm trying to migrate my local Active Storage files to Google Cloud Storage. I tried to just copy the files of /storage/* to my GCS Bucket - but it seems that this does not work.

I get 404 not found errors cause it is searching for files like: [bucket]/variants/ptGtmNWuTE...

My local storage directory has a totally different folder structure with folders like: /storage/1R/3o/NWuT....

My method to retrieve the image is as followed:

variant = attachment.variant(resize: '100x100').processed url_for(variant) 

What am i missing here?

</div
     

Список ответов

1
 
vote
vote
Лучший ответ
 

Как оказывается - дискервис aka. Локальное хранилище использует другую структуру папки, чем облачные службы. Это действительно странно.

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

создал задачу грабли, чтобы скопировать файлы в облачные сервисы. Запустите его с <Код> rails active_storage:migrate_local_to_cloud storage_config=google Например.

 <код> namespace :active_storage do   desc "Migrates active storage local files to cloud"     task migrate_local_to_cloud: :environment do       raise 'Missing storage_config param' if !ENV.has_key?('storage_config')        require 'yaml'       require 'erb'       require 'google/cloud/storage'        config_file = Pathname.new(Rails.root.join('config/storage.yml'))       configs = YAML.load(ERB.new(config_file.read).result) || {}       config = configs[ENV['storage_config']]        client = Google::Cloud.storage(config['project'], config['credentials'])       bucket = client.bucket(config.fetch('bucket'))        ActiveStorage::Blob.find_each do |blob|         key = blob.key         folder = [key[0..1], key[2..3]].join('/')         file_path = Rails.root.join('storage', folder.to_s, key)         file = File.open(file_path, 'rb')         md5 = Digest::MD5.base64digest(file.read)         bucket.create_file(file, key, content_type: blob.content_type, md5: md5)         file.close         puts key       end     end   end   
 

As it turns out - DiskService aka. local storage uses a different folder structure than the cloud services. Thats really weird.

DiskService uses as folders part of the first chars of the key. Cloud services just use the key and put all variants in a separate folder.

Created a rake task to copy files over to cloud services. Run it with rails active_storage:migrate_local_to_cloud storage_config=google for example.

namespace :active_storage do   desc "Migrates active storage local files to cloud"     task migrate_local_to_cloud: :environment do       raise 'Missing storage_config param' if !ENV.has_key?('storage_config')        require 'yaml'       require 'erb'       require 'google/cloud/storage'        config_file = Pathname.new(Rails.root.join('config/storage.yml'))       configs = YAML.load(ERB.new(config_file.read).result) || {}       config = configs[ENV['storage_config']]        client = Google::Cloud.storage(config['project'], config['credentials'])       bucket = client.bucket(config.fetch('bucket'))        ActiveStorage::Blob.find_each do |blob|         key = blob.key         folder = [key[0..1], key[2..3]].join('/')         file_path = Rails.root.join('storage', folder.to_s, key)         file = File.open(file_path, 'rb')         md5 = Digest::MD5.base64digest(file.read)         bucket.create_file(file, key, content_type: blob.content_type, md5: md5)         file.close         puts key       end     end   end 
</div
 
 

Связанный проблема

1  FXCOP / STYLECOP Equivalent для Ruby на рельсах?  ( Fxcop stylecop equivalent for ruby on rails ) 
Есть ли какие-либо инструменты анализа статического кода для Ruby на рельсах? Я ищу что-то на линии «тесты VS-анализа кода», а также анализ на основе правил, ...

0  find_or_initialize_by_title Уникальность  ( Find or initialize by title uniqueness ) 
У меня есть Text_field для тегов в вложенной форме (это связано с поездками), которые разделены на запятую на сохранение и сохранение слов в строке, отделенны...

1  Как я могу использовать Twitter Bootstrap с Ruby на Rails 3.2.12?  ( How do i use twitter bootstrap with ruby on rails 3 2 12 ) 
Я переключаюсь с PHP, чтобы Ruby на рельсы, и я люблю его, единственное, что я так привык к Twitter Bootstrap для большинства моих дизайнов, и теперь я чувств...

0  Ошибка обновления записи  ( Error updating a record ) 
Я получаю ошибку mysql: #update (ActiveReCord :: authentInvalid) "mysql :: Ошибка: # hy 000got Ошибка 139 из механизма хранения: При попытке обновить те...

52  В чем разница между использованием .Exists?, И. Представляют? в рубине?  ( What is the difference between using exists and present in ruby ) 
Я хочу убедиться, что я использую их для правильного случая и хотите знать любые тонкости. Кажется, они функционируют одинаково, что нужно проверить, было ли ...

0  Rails 3 ActiveRecord Query Вопрос  ( Rails 3 activerecord query question ) 
У меня есть модель <код> X что <код> belongs_to :y и имеет поле <код> quantity <код> Y Модель: <код> has_many :xs belongs_to :user belongs_to :z <...

7  Rails: Размер кеша в файле управления  ( Rails control file store cache size ) 
Документация для кэша на основе файлов в Rails говорит: Обратите внимание, что кеш будет расти, пока не будет заполнен диск, если вы не Периодически очищ...

10  Какой правильный способ запуска одного контроллера действия от другого действия контроллера без перенаправления HTTP?  ( Whats the correct way to run one controller action from another controller acti ) 
Я хотел бы иметь возможность отправлять из одного контроллера на другой условно, на основе комбинации параметров запросов и данных в базе данных. Что я имею...

3  Chromedriver на Heroku / Rails: Невозможно загрузить приложение: Selenium :: Webdriver :: Ошибка :: WebDrivererror: Не файл: "/ usr / local / bin / chromedriver"  ( Chromedriver on heroku rails unable to load application seleniumwebdrivere ) 
Я получаю ошибку выше при попытке запустить Selenium на Heroku, ROR приложение. Я добавил buildpacks heroku-buildpack-google-chrome и heroku-buildpack-chrom...

0  Ruby On Rails - Включение клиента скачать видео  ( Ruby on rails enabling client to download videos ) 
Требование - у меня есть видео, размещенное на моем сервере, пользователь должен быть в состоянии загрузить файл, нажав на ссылку. Я следую инструкциям, при...

260  Rails: update_attribute vs update_attributes  ( Rails update attribute vs update attributes ) 
<код> Object.update_attribute(:only_one_field, "Some Value") Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3") Оба из...

0  Rails Ajax Перезагрузить страницу. Почему?  ( Rails ajax reload the page why ) 
Я создаю форму: <код> <%= form_for @cover, :remote => true, :html => { :multipart => true } do |file| %> <%= file.file_field(:image, :class => 'choose_i...

6  Готовая загрузка полиморфных ассоциаций в ActiveSerecord  ( Eager loading of polymorphic associations in activerecord ) 
Это мой первый раз, используя Rails, и мне было интересно, если можно загрузить одну полиморфную ассоциацию в одном запросе SQL? Модели и ассоциации между ним...

0  Маршрутизация поддоменов в рельсах и главном участке  ( Subdomain routing in rails and main site ) 
Я пытаюсь установить следующее: www.domain.com идет на главный сайт (пользователь может зарегистрироваться, информацию о приложении) foo.domain.com отправ...

3  Как сделать одинаковую страницу 404 для всех неизвестных запросов, включая изображения, в Rails 3.2, не указав каждый формат файла индивидуально?  ( How to render the same 404 page for all unknown requests including images in r ) 
Мы используем следующий путь в маршрутах в маршрутах .rb на 404S: <код> # Catches all 404 errors and redirects match '*url' => 'default#error_404' Но эт...

Связанный проблема

1  FXCOP / STYLECOP Equivalent для Ruby на рельсах? 
0  find_or_initialize_by_title Уникальность 
1  Как я могу использовать Twitter Bootstrap с Ruby на Rails 3.2.12? 
0  Ошибка обновления записи 
52  В чем разница между использованием .Exists?, И. Представляют? в рубине? 
0  Rails 3 ActiveRecord Query Вопрос 
7  Rails: Размер кеша в файле управления 
10  Какой правильный способ запуска одного контроллера действия от другого действия контроллера без перенаправления HTTP? 
3  Chromedriver на Heroku / Rails: Невозможно загрузить приложение: Selenium :: Webdriver :: Ошибка :: WebDrivererror: Не файл: "/ usr / local / bin / chromedriver" 
0  Ruby On Rails - Включение клиента скачать видео 
260  Rails: update_attribute vs update_attributes 
0  Rails Ajax Перезагрузить страницу. Почему? 
6  Готовая загрузка полиморфных ассоциаций в ActiveSerecord 
0  Маршрутизация поддоменов в рельсах и главном участке 
3  Как сделать одинаковую страницу 404 для всех неизвестных запросов, включая изображения, в Rails 3.2, не указав каждый формат файла индивидуально? 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.