如何解决“找不到密钥::密码”?

时间:2019-04-10 15:27:17

标签: ruby-on-rails

我对铁轨非常生锈,我认为自从使用7年来,它发生了很多变化。

我正在尝试设置此示例应用:https://iridakos.com/news/2015/06/21/rails-sample-api-ui

我面临的问题是UI无法与API正确交互。我在下面的屏幕截图中得到了错误。

lofocats UI应用程序为我提供了以下堆栈跟踪:

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'

application_controler.rb中的第44行是开始块(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特定的答案。

screenshot of error

4 个答案:

答案 0 :(得分:1)

仅在9年后回答,因为这是我在此问题上发现的仅有主题之一。就我而言,尽管我在命令行中使用Curl进行调用,但使用Unirest和RestClient都给我标题带来了错误。我切换到HTTParty gem,没有更多错误。

从对RestClient的Github的讨论中推断,这可能是由于RestClient和Unirest“检查较弱的默认TLS密码”,原因是较旧版本的Ruby没有“健全的密码列表”。

https://github.com/rest-client/rest-client/pull/573

答案 1 :(得分:1)

将您的rest-client宝石升级到>= 2.0.1

此问题与OpenSSL的较新版本有关,并且已根据此问题注释在rest-client gem版本2.0.1中进行了修复:

https://github.com/rest-client/rest-client/issues/612#issuecomment-313034465

因此,只要确保您使用的是rest-client的2.0.1或更高版本,就应该一切都很好。我们将我们的静态设置为2.1.0,这是撰写本文时的最新稳定版本,一切运行顺利。

答案 2 :(得分:0)

您如何与API交互?您在使用宝石吗?当我使用过时的"styles": [ // .... "./node_modules/leaflet/dist/leaflet.css" ] gem时,我也收到类似的消息错误。从rest-client升级到1.X已解决问题。

2.X

也许有些宝石使用过时的NoMethodError (undefined method `response' for #<KeyError: key not found: :ciphers>)宝石?这是我的问题(如果我没记错的话),我分叉了仓库并更新了依赖项

答案 3 :(得分:0)

这似乎是rest-client gem的旧版本通常引发的错误。该错误将在this thread中进行讨论。

如果您的项目依赖于rest-client,则应升级到v2.0.1或更高版本。

如果您的项目不直接依赖于rest-client,那么您的其他依赖关系就是其中之一。尝试运行像这样的东西,看看会得到什么:

gem dependency -R | grep -B 3 rest-client

如果发现任何依赖于rest-client的顶级依赖项,则可以更新这些依赖项,看看是否可以解决问题。

如果您的一个依赖项是最新的,但仍使用rest-client的过时版本,则该依赖项的维护者将需要更新其rest-client版本。检查他们的已知问题列表,以查看是否已提交错误报告。如果没有,您可以第一个让他们知道他们需要更新!

如果必须继续使用旧版本的rest-client,则有两种已知的解决方法。您可以设置默认密码参数,该参数将在全球范围内应用:

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