#ruby-on-rails
#ruby-on-rails
Вопрос:
Я очень устал от rails, и я думаю, что многое изменилось за 7 лет с тех пор, как я работал с ним.
Я пытаюсь настроить этот пример приложения: https://iridakos.com/news/2015/06/21/rails-sample-api-ui
Проблема, с которой я сталкиваюсь, заключается в том, что пользовательский интерфейс неправильно взаимодействует с API. Я получаю сообщение об ошибке на скриншоте ниже.
Приложение пользовательского интерфейса lofocats выдает мне следующую трассировку стека:
KeyError (key not found: :ciphers):
lib/api/resource.rb:39:in `execute'
app/models/cat_entry.rb:46:in `all'
app/controllers/cat_entries_controller.rb:9:in `index'
app/controllers/application_controller.rb:44:in `set_api_authentication_token'
строка 44 в application_controler.rb является первой строкой блока begin ( Api::Configuration.current_authentication_token = session[:user_information][:authentication_token] if is_user_signed_in?
):
def set_api_authentication_token
begin
Api::Configuration.current_authentication_token = session[:user_information][:authentication_token] if is_user_signed_in?
yield
ensure
# Always nullify the token after each action.
Api::Configuration.current_authentication_token = nil
end
end
Я не уверен, как обойти эту ошибку. Я не видел этого раньше, и поиск SO дает некоторые ответы, специфичные для Cloudinary.
Ответ №1:
Обновите свой rest-client
драгоценный камень до >= 2.0.1
.
Эта проблема была связана с более новой версией OpenSSL
и была исправлена в rest-client
версии gem 2.0.1, согласно этому комментарию к проблеме:
https://github.com/rest-client/rest-client/issues/612#issuecomment-313034465
Поэтому просто убедитесь, что вы используете версию 2.0.1 или выше rest-client
, и у вас все должно быть хорошо. Мы статически установили наше значение 2.1.0
, которое было последним стабильным выпуском на момент написания, и все работает гладко.
Ответ №2:
Просто отвечаю 9 лет спустя, поскольку это была одна из единственных тем, которые я нашел по этой проблеме. В моем случае использование Unirest и RestClient выдало мне ошибку в названии, несмотря на то, что мои вызовы работали из командной строки с помощью Curl. Я переключился на драгоценный камень HTTParty, и больше никаких ошибок.
Вывод из обсуждения на Github RestClient, это может быть связано с тем, что RestClient и Unirest «проверяют слабые шифры TLS по умолчанию» из-за того, что в более старых версиях Ruby нет «нормального списка шифров».
Комментарии:
1. на самом деле это было с 10 апреля этого года (а не с апреля 2010 года)! Но я также сменил работу и больше не работаю над этим. 🙂
2. Ha! Более актуально, чем я думал. Извините, все еще слишком поздно для вас!
3. Нет необходимости менять драгоценные камни. Просто обновите свой
rest-client
gem до>= 2.0.1
того, где эта проблема была исправлена: github.com/rest-client/rest-client/issues /…
Ответ №3:
Как вы взаимодействуете с API? Вы используете какой-то драгоценный камень? У меня аналогичная ошибка сообщения, когда я использовал устаревший rest-client
gem. Обновление 1.X
до 2.X
решаемой проблемы.
NoMethodError (undefined method `response' for #<KeyError: key not found: :ciphers>)
Может быть, какой-то драгоценный камень использует устаревший rest-client
драгоценный камень? Это была моя проблема (если я правильно помню), я раздвоил репозиторий и обновил зависимость
Комментарии:
1. весь код находится здесь: github.com/iridakos/lofocats_ui и github.com/iridakos/lofocats_api — это не мой код, а просто пример приложения, которое я пытаюсь запустить локально
2. Если быть точным, это было исправлено в версии
2.0.1
rest-client
gem, поэтому убедитесь, что вы обновились хотя бы до этой версии. Последняя опубликованная версия (на момент написания) — это2.1.0
, которая отлично сработала для нас.
Ответ №4:
Это похоже на ошибку, обычно возникающую в старых версиях rest-client
gem. Ошибка обсуждается в этой теме .
Если ваш проект зависит от rest-client
, вам следует перейти на версию v2.0.1 или лучше.
Если ваш проект не зависит напрямую rest-client
, скорее всего, это зависит от одной из ваших других зависимостей. Попробуйте запустить что-то подобное и посмотрите, что вы получите:
gem dependency -R | grep -B 3 rest-client
Если вы обнаружите какие-либо зависимости верхнего уровня, которые зависят от rest-client
, вы можете обновить их и посмотреть, решит ли это проблему.
Если одна из ваших зависимостей обновлена, но все еще использует устаревшую версию rest-client
, разработчикам этой зависимости потребуется обновить свою rest-client
версию. Проверьте их список известных проблем, чтобы узнать, был ли отправлен отчет об ошибке. Если нет, вы можете первым сообщить им, что им нужно обновить!
Если вы должны продолжать использовать более старую версию rest-client
, есть два известных обходных пути. Вы можете установить аргумент ciphers по умолчанию, который будет применяться глобально:
OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers]=OpenSSL::SSL::SSLContext.new.ciphers;
Или вы можете добавить следующую опцию к отдельным запросам:
ssl_ciphers: RestClient::Request::DefaultCiphers
Ссылка: https://www.rubydoc.info/gems/rest-client/1.8.0/RestClient/Request