我对铁轨非常生锈,我认为自从使用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特定的答案。
答案 0 :(得分:1)
仅在9年后回答,因为这是我在此问题上发现的仅有主题之一。就我而言,尽管我在命令行中使用Curl进行调用,但使用Unirest和RestClient都给我标题带来了错误。我切换到HTTParty gem,没有更多错误。
从对RestClient的Github的讨论中推断,这可能是由于RestClient和Unirest“检查较弱的默认TLS密码”,原因是较旧版本的Ruby没有“健全的密码列表”。
答案 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