关于我的 Amazon Simple Workflow / AWS Flow for Ruby 应用程序的架构,我有一个简单的问题。作为背景,我有一个简单的工作流,其中一个活动在 Opsworks 上的 AWS Flow for Ruby 层中运行。我有一个单独的 REST API 在 Opsworks 的 Rails App Server 层中运行,我想启动工作流。
启动工作流的 REST API 中的代码:
1: domain = AWS::SimpleWorkflow.new.domains['my_domain']
2: workflow_client = AWS::Flow::workflow_client(domain.client, domain) {{from_class: MyWorkflowClass}}
3: workflow_client.start_execution(input_1: @input1, input_2: @input2)
我的假设是我的工作流和 REST API 代码库可以是分开的,唯一的共同组件是aws-flow
Ruby gem 和require 'aws/decider'
. 但是,我发现我的 REST API 也需要具有require 'PATH_TO_MY_WORKFLOW_CLASS'
. 当我从启动工作流的 REST API 的代码文件中删除该行代码时,我收到以下错误:
undefined method `_options' for nil:NilClass; ["/Users/MyName/.rvm/gems/ruby-2.0.0-p247/gems/aws-flow-2.2.1/lib/aws/decider/utilities.rb:183:in `interpret_block_for_options'", "/Users/MyName/.rvm/gems/ruby-2.0.0-p247/gems/aws-flow-2.2.1/lib/aws/decider/implementation.rb:73:in `workflow_client'"
(error at line 2 above)
我弄错了吗?我真的需要在我的工作流启动应用程序(即我的 REST API)中要求 MyWorkflowClass 还是我做错了什么?我已经搜索了文档,但找不到明确的答案。我能找到的所有示例确实确实在工作流启动代码中包含了工作流类,但我不确定是因为它们被捆绑为一个简单的示例,还是因为它应该是这样的。我之所以不按面值抽取样本,是因为在工作流启动代码中要求工作流类对我来说没有任何意义。它将两个应用程序绑定得太紧,不符合我的口味。