作为我最后一年项目的一部分,我正在使用适用于 Java 的 Cloud Endpoints Frameworks (2.0.1),到目前为止,它取得了相对成功。 部署到我的 appspot.com 域时我没有遇到任何问题,但是,我在本地部署时遇到了一些问题。
(以下代码块中对 my-project-id 的任何引用都是我实际的谷歌云项目 ID 的别名)
我有一个带注释的@API 类的有效 openapi 描述符 (openapi.json),我正在使用“gcloud service-management deploy openapi.json”将其部署到云端点。 命令成功返回:
Service Configuration [2017-02-23r0] uploaded for service [api.endpoints.<my-project-id>.cloud.goog]
然后我将返回的 config_id 映射到我的 app.yaml 中正确的 endpoints_api_service
endpoints_api_service:
name: api.endpoints.<my-project-id>.cloud.goog
config_id: 2017-02-23r0
此服务由 gcloud cli 工具使用“gcloud 服务管理列表”列出
NAME TITLE
storage-component.googleapis.com Google Cloud Storage
api.endpoints.<my-project-id>.cloud.goog api.endpoints.<my-project-id>.cloud.goog
etc...
和“gcloud 服务管理配置列表 --service api.endpoints.my-project-id.cloud.goog”
CONFIG_ID SERVICE_NAME
2017-02-23r0 api.endpoints.<my-project-id>.cloud.goog
... other version configs
并且可以在我的 appspot.com 域上访问(我可以调用端点并收到正确的响应)
我正在尝试使用 java 的 maven appengine 插件(mvn appengine:devserver)在本地主机上部署我的项目,但是在 jetty 启动时我遇到了以下异常:
WARNING: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext...
com.google.api.config.ServiceConfigException: Failed to fetch default config version for service 'api.endpoints.<my-project-id>.cloud.goog'. No versions exist!
at com.google.api.config.ServiceConfigSupplier.fetchLatestServiceVersion(ServiceConfigSupplier.java:155)
....
然后部署陷入无休止的循环,尝试启动 jetty,并被错误消息击中,然后重新启动等。任何访问 localhost:8080 的尝试都会导致“503:找不到服务”错误
我假设我的应用程序的本地部署能够访问使用“gcloud service-management deploy”部署的服务配置,就像 appspot.com 部署一样,但事实并非如此? 查看 ServiceConfigSupplier.getchLatestServiceVersion() 的源代码,我收集到 serviceManagement.services().configs().list(my-service-name).execute().getServiceConfigs() 正在返回一个空列表,但为什么这只是发生在本地?
额外信息
我的 ENDPOINTS_SERVICE_NAME 环境变量匹配 'api.endpoints.my-project-id.cloud.goog'
我注意到几天前 com.google.api.config 有一个更新 (1.0.2),它依赖于旧版本的 com.google.api.services.servicemanagement(依赖于v1-rev14-1.22.0,最新版本为 v1-rev340-1.22.0) 我怀疑这是问题所在,但我想我会提到它,因为它包含与异常相关的类(ServiceManagement 由 ServiceConfigSupplier 使用,它抛出异常)。也许他们在寻找服务配置的地方存在不一致?
老实说,我很困惑,这有点让我头疼。我不喜欢必须删除端点,因为我开始喜欢它,但我们也不能真正失去对我们的 devserver 的使用。我希望有人能对这个问题有所了解。
最佳答案
这不是解决方法,但我能够通过使用 https://stackoverflow.com/a/41493548/1410035 中的建议解决该问题。 .
即,注释掉 ServiceManagementConfigFilter:
b) Comment out the ServiceManagementConfigFilter from web.xml , ie,
<!-- <filter> <filter-name>endpoints-api-configuration</filter-name> <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class> </filter> --> <!-- <filter-mapping> <filter-name>endpoints-api-configuration</filter-name> <servlet-name>EndpointsServlet</servlet-name> </filter-mapping> -->
请注意,您必须注释掉 filter 和 filter-mapping 并且它们在文件。
我发现我不需要删除链接答案中“a”点中提到的缩放 block 。
关于java - com.google.api.config.ServiceConfigSupplier - 无法获取服务的默认配置版本(仅在本地主机上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42421042/
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我