2016-05-05 5 views
1

Отказ от ответственности, я Rails newb. Поэтому я, возможно, вообще ошибаюсь.Как получить Push-уведомления от приложения AWS S3 to Rails?

Мне нужно отобразить последнее изображение в представлении приложения rails сразу же после его загрузки в ведро AWS S3 (из другого источника). Вместо повторного обновления/опроса для последнего изображения, я думаю, что было бы меньше налогов и стоило бы получать уведомление от AWS при загрузке нового изображения.

Я просмотрел SNS, и похоже, возможно, HTTP-уведомление с рельсом url, поскольку конечная точка может быть вариантом. Но я не уверен, как это сделать.

Любые идеи или предложения?

ответ

3
  1. Создайте конечную точку Rails, которая может принимать уведомления SNS.
  2. Enable S3 event notifications to SNS
  3. Configure the SNS topic, который принимает события S3 для нажатия на конечную точку приложения Rails.
+0

Спасибо @Mark B. Я смог подписаться на мою конечную точку на тему SNS Amazon. Часть, на которую я застрял, теперь обрабатывает HTTP-запрос от SNS с Rails. Не знаете, как использовать Rails для обработки сообщения SNS или отправки запроса в целом. – Matte3o

+0

@ Matte3o Сообщение будет в формате JSON, используйте любой парсер JSON Ruby/Rails, с которым вам удобно. –

0

Вычисленный подход, который работает, но не уверен, является ли он наиболее оптимальным, или если это следует за правильными стандартами рельсов, но он работал и относительно прост в реализации. Поэтому я хотел бы описать процесс для тех, кто хочет сделать то же самое, что заключается в том, чтобы подписаться на приложение Rails на уведомления Push Push от Amazon.

Прежде всего, вам необходимо настроить сторону AWS этой конфигурации, поэтому следуйте инструкциям от Марка Б, первого ответа на этот вопрос. Вы обнаружите, что документация AWS дает инструкции о том, чтобы ваше приложение готово обрабатывать запросы HTTP Post до настройки подписки SNS. Тем не менее, следующее, что вы можете сделать на стороне Rails установки, чтобы все сконфигурировано.

Для получения запроса на отправку HTTP вам необходимо настроить простой API. Что вы можете сделать, создав контроллер и настраиваемые маршруты для обработки запросов на получение/отправку из внешних источников. Поскольку Amazon отправляет только сообщения, вам требуется только одно действие контроллера и один маршрут для этого. Начните с новым контроллером и сохраните файл контроллера в apps/controllers/api/v1/, с форматом:

class Api::V1::ControllerNameController < ApplicationController 
    def create 

    end 
end 

Затем установите ваши маршруты config/routes.rb:

namespace :api, defaults: {format: :json} do 
    namespace :v1 do 
     post "/controller_name" => 'controller_name#create' 
    end 
    end 

Вы заметите, местоположение файла контроллера и имена вызовов создайте URL-адрес с форматом /api/v1/, это сделано для хорошей практики, в котором this article имеет хорошее объяснение, почему в разделе 4.1.3

В AWS вы затем установите лету ur для подписки на уведомления https://your-site-url/api/v1/controller_name, которая соответствует URL-адресу для почтового запроса.

Далее вы готовы принять запрос на отправку от AWS. Важная вещь, которую я обнаружил, заключается в том, что входящий запрос на отправку доступен с помощью переменной request. Для того, чтобы преобразовать это в читаемом формате JSON, можно назвать следующие:

request.body.read() 

Что вы можете поместить внутрь создать действие нового контроллера.Это вы можете распечатать на консоль с чем-то вроде следующего:

@request = request.body.read() 
puts "this is the content of the request: #{@request}" 

С выходом в консоли вы можете захватить «SubscribeURL» внутри этого JSON объект, скопировать и вставить его в веб-браузере, чтобы подтвердить ваш подписка. И бум, это половина битвы!

Кроме того, эту новую переменную можно использовать для хранения вашего объекта JSON и доступа ко всей соответствующей информации из AWS и делать то, что вам нужно для этого.

Смежные вопросы