问题标签 [ironworker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 在 IronWorker 中存储数据库连接字符串的推荐方法是什么
Heroku 的常见做法是让环境变量保存敏感凭据,这样就不需要将密码文件签入 git。
IronWorkers 有类似的东西吗?应该如何将数据库连接字符串传递给必须连接到数据库的 IronWorker?理想情况下,我想避免在 database.yml 中使用用户名和密码。
例如:
$ heroku 配置
HEROKU_POSTGRESQL_CYAN_URL: postgres://mmuxxxxxxxnhzp:X0JdWLxxxcJQ4ffO0xTjO6scJr@ec2-23-23-214-251.compute-1.amazonaws.com:5432/de11tlh7iq999x
$ heroku 配置:设置 SOMEVAR=somevalue
SOMEVAR=somevalue
任何帮助,将不胜感激!
谢谢, 迪米特里
iron.io - IronWorkers 何时支持 Ruby 2.0?
IronWorkers 上 ruby 的默认语言版本是 1.9.3。什么时候会升级到2.0?
http://dev.iron.io/worker/reference/environment/#default_languages_versions
启动任务时是否有一种简单的方法可以升级到 ruby 2.0 而不会造成太多延迟?
谢谢, 迪米特里
iron.io - .worker 文件与 `gemfile "Gemfile", "group"` 增加远程构建时间 x10
为了更好地管理我的应用程序中所需的 gem,我创建了一个 Gemfile 组,名为 :iron:
这将有助于巩固钢铁工人所需的宝石。我的 .worker 文件现在如下:
而不是单独列出所有的宝石:
不幸的是,这将我的远程构建时间从 1 分钟增加到 10 分钟。输出试图包含更多的 gem,似乎冒泡了嵌套的依赖项:
前:
后:
这个输出是本地的,但是 IronWorker 服务的时间更长,因为它不止一次地重新安装 gems(卸载然后重新安装 bundler)。下面的日志有详细信息。
https://hud.iron.io/tq/projects/5254773dd05880000d000003/tasks/525ee1d9f8953468b927e83f/log
从那以后,我们回到了一个 .worker 文件,它只是列出了我们需要的 gem,而不是调用 gemfile "Gemfile"、"iron"。任何有关如何在不重新安装捆绑程序的情况下使用 gemfile 并有 10m 上传时间的帮助将不胜感激!
谢谢。
编辑
添加完整的 Gemfile。请注意,我们不想拉入 :default 组中的所有宝石。这对我们的工人来说太过分了。我们只想要:铁。
捆绑器版本 1.3.5
分组 Gemfile:
iron.io - 在一次 API 调用中创建多个 IronWorker 任务
现在,iron_worker_ruby_ng gem 允许一次创建一个任务:
钢铁工人 client.tasks.create('MyWorker', {:client => 'Joe'})
有些场景需要创建数千个任务。在这种情况下,如果一个人可以一次创建多个工作,它会更快、更高效:
--
我已经分叉了 gem 并进行了更改,但不幸的是服务端点返回 400。有没有办法做到这一点?如果没有,这可能是一个功能吗?
谢谢,
迪米特里
node.js - Ironworker 有效载荷变量节点
我可能在这里遗漏了一些非常明显的东西,但是可用于将 Node 与 Iron Worker 结合使用的文档仍然非常有限。
所以我已经很好地创建了我的工作人员,但是我无法弄清楚一旦将有效负载传递给任务后会发生什么。是否有传递给 exec 文件的变量或函数允许我访问有效负载对象?
希望有人可以提供帮助。
ironworker - Ironworker 上传的 mime 类型问题
我正在尝试上传一个工作人员并在我的 .worker 文件中远程构建它。我收到此错误消息。
您已经激活了 mime-types 2.0,但您的 Gemfile 需要 mime-types 1.25。使用 bundle exec 可以解决这个问题。
我已经尝试卸载 mime-types 并安装 mime-types 1.25,但这似乎也没有解决它。
ironworker - 我的 IronWorker 主从设置导致 rest 客户端 400 错误。我该如何解决这个问题?
我正在设置一个简单的 Ironworker Master/Slave worker,
但我一直收到这个错误
这是产生此错误的代码:
大师: *messages_dispatcher.rb*
*messages_dispatcher.worker*
从站: *messages_worker.rb*
*messages_worker.worker*
有没有人遇到过类似的问题。如果我将 'rest' 替换为 'typheous' gem,我同样会在同一行出现 400 错误。
任何帮助深表感谢!
node.js - node.js 应用程序和 IronWorker 上的工作程序之间的通信。如何正确轮询任务状态并接收任务响应?
申请如下:
首先,我使用带有 express.js 框架的 node.js 应用程序作为 Web 服务器。在前端,当用户通过 POST 表单发送付款时,express.js 通过 'app.post' 路由此任务并调用外部 API 进行付款。理想情况下,此 API 请求应返回应重定向用户以进行付款的 URL。然后,express.js 应该通过“app.post”响应变量(res)重定向用户:
res.redirect(307, url);
由于此支付 API 请求需要一些时间,而且我使用的是 Heroku,因此 API 请求超时并返回错误。为了解决这个问题,我知道我需要在一个工作者 Heroku 插件上设置一个工作者(根据https://stackoverflow.com/a/11438381/2859410),例如 IronWorker。但是,我无法理解将工作人员中发出的外部 API 请求返回的 URL 传递回 node.js 应用程序的正确机制是什么。
为了让事情更清楚: - 用户提交付款表格。
- node.js 应用程序处理 POST 数据并调用工作人员(在工作人员上“排队”任务)。
- 工作人员请求一个外部支付 API,该 API 返回一个 URL。
- 工作人员应将此 URL 传达回 node.js 应用程序。
- node.js 应用程序应接收此 URL 并重定向用户。
然而,这些操作必须是非阻塞的。
我可以想到 2 种通信替代方案:
替代方案 1 - 当前端用户通过 POST 请求付款时,node.js 应用程序调用特定的工作人员(也通过 POST),并将付款数据作为有效负载。Worker 处理数据,请求支付 API 并获取支付 URL。同时,node.js 对工作状态进行轮询,并在收到“已完成”状态时重定向用户。
谬误:对我来说,这里的困难是以异步方式执行持续轮询。由于我需要将用户重定向到支付 URL,因此我需要在“app.post('/form', function(req,res) {”方法中包含 URL,以便我可以响应 (“res ") 来重定向用户。为此,我查看了 async.whilst(test, fn, callback),但我不知道如何使用同步的测试函数。我的直接想法是测试发出状态请求的函数和重定向用户的回调函数。但是,此测试函数是异步操作(例如使用“请求”模块)。
备选方案 2 - 工作人员还接收支付数据作为有效负载,处理数据,请求支付 API 并获取支付 URL。完成后,它会通过 HTTP 请求将 URL 传送回 node.js 应用程序。
谬误:我如何将返回给 node.js 应用程序的 URL 与请求付款的用户联系起来?在我的理解中,带有支付 URL 的 HTTP 请求将有一个独立的路由,而不是表单 POST 路由。换句话说,这样我将无法在“app.post('/orderform', function(req,res) {”方法中使用支付 URL,因此无法使用响应变量("res") 重定向用户。
Tha node.js 应用程序的结构如下:
在这种情况下会推荐什么?
提前致谢。
heroku - 在外部工作人员中使用 sqlalchemy 声明式
我有一个使用 Flask 和 sqlalchemy 用 python 编写的网络应用程序。这个应用程序在 Heroku 上运行,作为一个工人,我使用 Ironworker 扩展,我在模型模块中定义了我的所有模型,如下所示:
(注意这是如何从应用程序导入数据库的)我可以通过实例化模型在我的应用程序中创建这些模型的实例,如下所示:
现在,我想做的是能够在我的外部工作人员上创建这些模型的实例。唯一阻止我这样做的是对我的应用程序模块的依赖。我不觉得这种依赖是合理的,并且希望找到一种更好的设计方法,能够简单地将我的模型模块导出到 worker 并在那里初始化 sqlalchemy 实例,并创建我的模型实例并将它们完全保存到数据库中同样的方式我可以在应用程序本身中做到这一点。
请注意,我已经可以像这样从工作人员访问我的数据库:
我只是在寻找一种更好的方法来将我的模型结构反映在工人身上。具体来说,我正在考虑我的模型发生变化时的场景,我将不得不分别维护两端的代码。如果我设法重用模型并在两端使用声明性,那么工人方面将不会有任何维护。
yii - 在使用我的工作时使用 IronWorkers
我的网站托管在 AWS Elastic Beanstalk (PHP) 上。我使用 Yii 框架作为 MVC。
不久前,我想每天运行一个 SQL 查询。我查看了如何在 Beanstalk 上运行 crons,合并 Cloud 和 Cron 的概念似乎很复杂。我遇到了 Iron Worker ( http://www.iron.io/worker ),并设法创建了一个当前工作正常的工人。
今天我想运行一个更复杂的 cron(在我的数据库中查找通知,决定是否发送电子邮件,构建电子邮件模板并发送电子邮件(通过 AWS SES)。
据我了解,工作文件应该是独立的项目,包含他们工作所需的一切。然而,我已经投入了大量的时间和精力来构建我的 MVC。我有复杂的模型、验证、电子邮件模板引擎等......使用我所做的工作来创建 Iron Worker 似乎非常困难。即使我设法将我的所有代码移植到一个工作人员(这似乎需要做很多工作),这意味着每当我对我的主代码进行更改时,我都需要确保工作人员也有这些更改。这意味着我将拥有我的代码的“分支”。如果我想在未来创造更多的工人,那就更是如此。
什么是正确的方法?