我希望我的Rails 3.1应用程序在早上8点扩展到1个web dyno,然后在下午5点扩展到0个web dynos。
但是,我不想报名参加付费服务,而且我不能指望我的家用电脑连接到互联网。
似乎Heroku Scheduler应该让这个变得微不足道。任何快速解决方案或链接?
答案 0 :(得分:11)
答案是'是'你可以从调度程序那里做到这一点,一旦你知道了答案,这是微不足道的:
将一个rake任务添加到lib / tasks / scheduler.rake:
desc "Scale up dynos"
task :spin_up => :environment do
heroku = Heroku::Client.new('USERNAME', 'PASSWORD')
heroku.ps_scale(ENV['APP_NAME'], :type=>'web', :qty=>2)
end
# Add a similar task to Spin down
添加Scheduler插件:heroku插件:添加调度程序:标准
备注:强> 需要步骤1,因为我找不到任何其他方式来确定应用程序名称(我为我的应用程序使用'staging'和'production'环境。
步骤3是必需的,因为否则ruby命令会出错,因为它要求您首先同意(通过是/否响应)您将因此操作而向您收取费用。
在第4步中,我找不到任何关于如何通过heroku gem使用API密钥执行此操作的文档,因此看起来需要user / pass。
希望这有助于其他人!
答案 1 :(得分:11)
刚刚实现了这种方法(@dnszero上面的答案很好),我想我会用Heroku的新API更新答案。
将您的应用名称添加为heroku配置变量
require 'heroku-api'
desc "Scale UP dynos"
task :spin_up => :environment do
heroku = Heroku::API.new(:api_key => 'YOUR_ACCOUNT_API_KEY')
heroku.post_ps_scale(ENV['APP_NAME'], 'web', 2)
end
这是heroku(2.31.2),heroku-api(0.3.5)
答案 2 :(得分:3)
您可以通过
将网络流程扩展为零 heroku ps:scale web=0
或通过
返回1 heroku ps:scale web=1
然后你必须设置一个任务设置为8,它可以扩展它,另一个设置为17,可以缩小它。 Heroku可能会要求您验证您的帐户(即输入信用卡详细信息)以使用Heroku Scheduler plus,然后您必须在您的应用程序中使用Heroku gem以及Heroku凭据,以便它可以打开或关闭您的应用程序。 / p>
但是就像尼尔说的那样 - 你每个月可以免费获得750小时的费用,但是为什么不能让它一直运行?
答案 3 :(得分:1)
另请参阅此完整要点,该要点还涉及Heroku调度程序中使用的正确命令:https://gist.github.com/maggix/8676595
答案 4 :(得分:1)
所以我决定在2017年实现这一点,并且看到已接受的答案所使用的Heroku gem已被弃用,以支持'platform-api'gem。我只是觉得我会发布对我有用的内容,因为我没有看到任何其他帖子更新的答案。
这是我的rake文件,它将我的网络dynos缩放到2个。我使用'httparty'gem来为Platform API发出一个PATCH请求,根据他们的docs,在“形成“部分。
require 'platform-api'
require 'httparty'
desc "Scale UP dynos"
task :scale_up => :environment do
headers = {
"Authorization" => "Bearer #{ENV['HEROKU_API_KEY']}",
"Content-Type" => "application/json",
"Accept" => "application/vnd.heroku+json; version=3"
}
params = {
:quantity => 2,
:size => "standard-1X"
}
response = HTTParty.patch("https://api.heroku.com/apps/#{ENV['APP_NAME']}/formation/web", body: params.to_json, headers: headers)
puts response
end
答案 5 :(得分:0)
如果你在雪松堆上运行,你将无法在不改变proc文件和部署的情况下扩展到零web dynos。
另外,如果你每月获得一个免费的dyno(750 dyno小时,实际上是一个多月),为什么还要费心呢?
答案 6 :(得分:0)
或者,如果您想使用服务而不是实现自己的服务,请尝试http://scaledynos.herokuapp.com/ - 它会根据时间进行缩放
答案 7 :(得分:0)
作为对@ Ren的回答的更新,Heroku的Platform API gem使这非常简单。
heroku = PlatformAPI.connect_oauth(<HEROKU PLATFORM API KEY>)
heroku.formation.batch_update(<HEROKU APP NAME>, {"updates" =>
[{"process" => <PROCESS NAME>,
"quantity" => <QUANTITY AS INTEGER>,
"size" => <DYNO SIZE>}]
})