Предисловие: К.Х. Гарза, мой дедушка. Первый инженер, которого я когда-либо встречал, и который вдохновил меня приложить руку к миру и изменить его к лучшему.

Что ж, если вы меня знаете, то знаете, что этот месяц был особенно тяжелым даже в разгар пандемии. Но в основном этот небольшой пост о том, как я создал приложение на Rails, которое использует гем RSpotify для геймификации пользовательских плейлистов Spotify.

Многие люди писали о создании приложения, использующего OmniAuth. Многие из них оказались фантастически полезными при создании Greatest Hits. Однако немногие авторы, если вообще есть, действительно говорят о подводных камнях и ошибках на этом пути. Конечно, хороший ученый скажет вам, что большая часть знаний основана на документировании неудач, которые, как правило, происходят в гораздо большем количестве, чем успехи.

Он, конечно, чрезвычайно токсичен, но это наименьшая из проблем. Он гиперголен со всеми известными видами топлива, и настолько быстро гиперголен, что ни одна задержка воспламенения никогда не измерялась. Он также гиперголен с такими вещами, как ткань, дерево и инженеры-испытатели, не говоря уже об асбесте, песке и воде, с которыми он вступает в реакцию со взрывом. Он может сохраняться в некоторых обычных конструкционных металлах — стали, меди, алюминии и т. д. — из-за образования тонкой пленки нерастворимого фторида металла, которая защищает большую часть металла, точно так же, как невидимый слой оксида на алюминии. предотвращает его сгорание в атмосфере. Если, однако, это покрытие расплавится или соскоблится и не сможет восстановиться, перед оператором встанет проблема борьбы с фторметаллическим пожаром. Чтобы справиться с этой ситуацией, я всегда рекомендовал хорошую пару кроссовок.
Джон Друри Кларк, Зажигание!: Неофициальная история жидкого ракетного топлива

Проблема 1: "Задержка зажигания" Сбой генератораRails new приложений

Обычно любое новое приложение, созданное на Rails, начинается с того, что кто-то бросает невероятно мощную команду rails new APP_NAME. Это запускает серию сценариев, которые создают шаблонный код любого создаваемого приложения. В моем случае при создании приложения под названием «Greatest Hits» оно выглядело примерно так: $ rails new greatest-hits Rails затем покорно начал выполнять контрольный список. Выплевывать отзывы в моем терминале Ubuntu (версия 2.x, работающем в подсистеме Windows для Linux), пока не появится странное сообщение об ошибке.

Глубокое погружение в репозиторий Rails github указывает на эту конкретную ошибку имени, как показано на изображении 1, показывает, что это довольно редкая проблема. Один из них обычно решается путем обновления до последней версии Rails. Однако я уже использую последнюю версию (на момент написания статьи Rails 6.1.3.1 все еще установлен в корневом каталоге). Попробовав несколько разных вариантов обновления Node, Yarn, вручную установив и обновив WebPacker. Наш инструктор предложил мне просто попробовать вернуться к более старой версии рельсов. Разумеется, работа с командой version force для использования версии 6.0.0 успешно создала основу для моего проекта. Должен признаться, я до сих пор не совсем уверен, что именно вызывает мою проблему с v6.1, но откат сработал, проблема решена.
Решение: Итеративно откатывайте версии Rails до тех пор, пока генератор не заработает локально.

Возвращаясь к теме компьютерной безопасности, TCP Wrapper является примером такой системы безопасности. Я написал это, когда мои системы были атакованы кем-то, кто, казалось, проходил сквозь стены. -Витсе Венема

Проблема 2: Как именно мы взаимодействуем с API Spotify?

Что ж, к счастью, вместо того, чтобы составлять все методы, необходимые для связи с API Spotify, RSpotify gem функционирует как удобный интерфейс или оболочка. для серверной части API, а затем при запросах данных из приложения предоставляет огромное количество данных в виде огромных хэшей Ruby. Например, результирующие данные для чего-то такого простого, как отдельная музыкальная дорожка, представляют собой многоуровневый хэш с вложенными хэшами и массивами с сотнями отдельных ключей.
К счастью, с Ruby установка RSpotify проста:
Мы добавляем эту строку в Gemfile приложения:

gem 'rspotify'

А затем выполните:

$ bundle install

Однако API Spotify требует, чтобы любой запрос предварялся парой ключей аутентификации. Одним из них является общедоступный ключ идентификатора приложения, который является уникальным ключом идентификатора, предоставляемым консолью Spotify Dev при регистрации приложения для разработки. Второй ключ — это секретный числовой ключ, используемый как часть криптографического хэша, который кодирует исходящие запросы данных. Чтобы предоставить эти ключи гему RSpotify и API Spotify без их публичного отображения в репозитории кода, нам потребуется использовать инструмент, называемый прокладкой.

В данном случае мы отказываемся от Figaro, так как его установка и настройка фантастически проста. Сначала мы добавляем гем Figaro в наш файл гем. Затем мы запускаем bundle install как обычно. Как только гем будет установлен, мы запускаем $bundle exec figaro install в терминале. Это автоматически создаст аннотированный файл config/application.yml и автоматически добавит его к локальному .gitignore Теперь все, что нам нужно сделать, это добавить ключи разработчика Spotify в этот файл в следующем формате.

spotify_id: "[YOUR ID KEY]"
spotify_secret: "[YOUR SECRET KEY]"

Бум! Теперь, сохранив файл application.yml с ключами. Figaro автоматически подставит их под переменные среды, когда они потребуются драгоценным камням RSpotify и Omniauth.

Решение 2. Сократите время разработки, используя возможности драгоценного камня-оболочки API