วิธีง่ายๆในการป้องกันไม่ให้ Heroku ไม่ทำงาน?


285

ในแอพฟรีของ Heroku dynos ดูเหมือนจะไม่ทำงาน - แอพของฉันมีปริมาณการใช้งานต่ำมาก แต่ก็ไม่เป็นที่ยอมรับในกรณีของฉันที่ผู้ใช้ของฉันต้องรอ 20+ วินาทีในการหมุน dyno ใหม่

ตรงไปตรงมาด้วยการรอแบบนั้นหลายคนจะออกไปก่อนที่หน้าแรกจะปรากฏขึ้น

ดังนั้นฉันมีปัญหา: ฉันควรจะจ่าย $ 36 ต่อเดือนเพื่อช่วยให้ผู้ใช้แต่ละรายใช้เวลาที่น่าอับอายนาน 20 วินาทีเมื่อการรับส่งข้อมูลของฉันอยู่ในหลักเดียวต่อวัน

มีวิธีแก้ไขไหม?


13
ขณะที่ 1 กรกฎาคม 2015 นี้จะเป็นไปไม่ได้อีกต่อไปตามประกาศของ Heroku: blog.heroku.com/archives/2015/5/7/heroku-free-dynos พวกเขาแนะนำแผน "งานอดิเรก" ที่มีราคาเพียง $ 7 / เดือน
Cristian

1
ตอนนี้อาจมีเซิร์ฟเวอร์เสมือนราคา $ 5 / เดือน (หรือเรียกเก็บเงินน้อยกว่าทุกชั่วโมง) ที่ให้การเข้าถึงเชลล์อย่างเต็มรูปแบบ ฯลฯ ฉันใช้ DigitalOcean มานานกว่าหนึ่งปีแล้ว แต่ฉันแน่ใจว่ามีคนอื่น ๆ ในพื้นที่เพื่อแข่งขัน IMO เป็นทางออกที่ดีกว่าถ้า Heroku จะไม่ฟรี ..
sricks

1
@sricks VPS เต็มรูปแบบ (ที่คุณต้องการจัดการอัปเดตกำหนดค่าเซิร์ฟเวอร์ Git เว็บเซิร์ฟเวอร์ DB เซิร์ฟเวอร์ไฟร์วอลล์ตะขอ Git การสำรองข้อมูล WAL-E ฯลฯ ฯลฯ เป็นสิ่งที่แตกต่างจาก Heroku ( a PaaS) ในบางกรณีคุณต้องการอดีตในคนอื่น ๆ หลัง แต่ดอลลาร์ดิบควรเป็นตัวชี้วัดหลัก เวลาและความเสี่ยงควรเป็น
elithrar

จะติดตั้ง Agent Relic ใหม่บนแอพ RoR ได้อย่างไร? newrelic.com/ruby
Manny Quintanilla

1
ตั้งแต่วันที่ 1 มิถุนายน 2559 จะเป็นไปได้อีกครั้งหากคุณยืนยันด้วยบัตรเครดิต การประกาศ คุณจะได้รับ 1,000 ชั่วโมงฟรีต่อเดือนและมีเพียง 730 ชั่วโมงในหนึ่งเดือน สมมติว่าคุณมีเพียงหนึ่งไดนาโมที่ทำงานคุณสามารถไป 24/7 ฟรี
มันฝรั่งอบ

คำตอบ:


351

คุณสามารถติดตั้งฟรีที่ระลึกใหม่ Add-on มีคุณสมบัติตรวจสอบความพร้อมใช้งานที่จะ ping ไซต์ของคุณสองครั้งต่อนาทีจึงป้องกันไม่ให้ไดโนไม่ทำงาน

โซลูชันเดียวกับ Jesse มากขึ้นหรือน้อยลง แต่อาจรวมเข้ากับ Heroku ... และด้วยความสามารถเพียงไม่กี่อย่าง (การตรวจสอบประสิทธิภาพนั้นยอดเยี่ยม)

การตรวจสอบความพร้อมใช้งาน

หมายเหตุ:สำหรับผู้ที่กล่าวว่าใช้งานไม่ได้: ส่วนที่สำคัญในคำตอบของฉันคือ "การตรวจสอบความพร้อมใช้งาน" เพียงแค่ติดตั้ง addon จะไม่ช่วย คุณต้องตั้งค่าการตรวจสอบความพร้อมใช้งานด้วย URL ของแอพ heroku ของคุณ


6
เราต้องติดตั้ง gem 'newrelic_rpm' ด้วยเพื่อป้องกัน dyno จาก idling หรือไม่?
simo

3
สิ่งนี้เพิ่มการใช้ไดโนมากขึ้นเท่าไหร่?
Trevoke

4
ฉันเพิ่งค้นพบนี้ค่อนข้างเร็ว มันไม่ยังคงทำงานที่ยอดเยี่ยม อย่างไรก็ตามในกรณีที่ฉันแน่ใจว่าฉันทำแบบสอบถาม DB ง่าย ๆ ก่อนที่จะแสดงข้อความ 'Application Available' ยังใช้งานได้ดีกับเจดีย์และโฮสต์ง่วงอื่น ๆ
Jacob Evan Shreve

8
@ aubraus: การแก้ไขของคุณถูกปฏิเสธ ... อย่างไรก็ตาม: สำหรับทุกคนที่กล่าวว่าไม่ได้ผล: ส่วนที่สำคัญในคำตอบของฉันคือ "การตรวจสอบความพร้อมใช้งาน" เพียงแค่ติดตั้ง addon จะไม่ช่วย คุณต้องตั้งค่าการตรวจสอบความพร้อมใช้งานด้วย URL ของแอพ heroku ของคุณ
ปิแอร์

13
ในกรณีที่ใคร ๆ ก็ยังคงมองหาสิ่งนี้ลิงก์โดยตรงสำหรับการปิงอยู่ที่นี่: synthetics.newrelic.com/accounts/ สีน้ำเงินของคุณ_account_idount/monitors/newเพียงในบัญชีของคุณ
Eric Yang

91

ในฐานะที่เป็นทางเลือกในการ Pingdom ผมขอแนะนำให้พยายามUptimerobot ฟรีและให้บริการตรวจสอบช่วงเวลา 5 นาที มันใช้งานได้ดีมากสำหรับฉัน

อัพเดทเมื่อวันที่ 7 พฤษภาคม 2558:สิ่งนี้จะเป็นไปไม่ได้อีกต่อไปเนื่องจากHeroku จะเปลี่ยน dyno ฟรีของพวกเขาเพื่อป้องกันการมีชีวิตอยู่ตลอด 24 ชั่วโมง:

การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งเกี่ยวกับการนอนแบบ Dyno หรือ 'idling' ในขณะที่แอพที่ไม่ต้องจ่ายเงินมักจะนอนหลับหลังจากหมดเวลากิจกรรมบางแอพใช้บริการส่ง Ping อัตโนมัติเพื่อป้องกันพฤติกรรมดังกล่าว Dynos ฟรีอนุญาตให้ใช้งานได้ 18 ชั่วโมงต่อช่วงเวลา 24 ชั่วโมงและในอีกไม่กี่สัปดาห์ข้างหน้าเราจะเริ่มแจ้งผู้ใช้แอปที่เกินขีด จำกัด นั้น ด้วยการเปิดตัวงานอดิเรก dyno ($ 7 ต่อเดือน) เราจะขอให้แอปของคุณนอนหลับหลังจากหมดเวลาหรืออัปเกรดเป็นตัวเลือกใหม่นี้

สิ่งนี้จะเกิดขึ้นเมื่อใด ตามโพสต์บล็อกของพวกเขา:

การประยุกต์ใช้การทำงานของไดโน 1X เดียวที่ไม่สะสมค่าใช้จ่ายไดโนอื่น ๆ จะถูกย้ายค่อยๆ dynos ใหม่ฟรีเริ่มตั้งแต่วันที่1 กรกฎาคม


1
ดูเหมือนจะมากขึ้น (แดกดัน) ลง คุณสามารถลงทะเบียนและเข้าสู่ระบบ แต่ถ้าคุณพยายามที่จะเพิ่มการตรวจสอบใหม่ก็แค่บอกว่า "การตรวจสอบแล้ว
เจฟฟ์ Axelrod

ดูเหมือนว่าจะทำงานอย่างเป็นธรรมดี ... ฉันเข้าใจ heroku นอนสิ่งต่าง ๆ บนบริการฟรี แต่มัน sucks เมื่อโฮสต์ผู้ประสานงานกลาง (ซึ่งโดยธรรมชาติไม่สามารถปรับขนาด)
jonasfj

ฉันไม่สามารถทำได้เนื่องจาก Uptimerobot ต้องการที่อยู่ IP ใช่หรือไม่ ฉันไม่เห็นวิธีที่จะให้มันทำงานกับ url ได้เช่น herokuapp url แก้ไข:ฉันไม่ดีฉันใส่http://และได้รับข้อผิดพลาด
Ruben Martinez Jr.

1
ความแตกต่างที่ยิ่งใหญ่คือช่วงเวลา 5 นาทีหมายความว่าจะเป็น 5 นาทีก่อนที่คุณจะได้รับการแจ้งเตือนหากไม่ทำงาน เราใช้ Pingometer ( pingometer.com ) ซึ่งมีช่วงเวลา 1 นาทีและดีมากกับ Heroku
okoboko

9
เมื่อวันที่เมษายน, 2017, จำกัด เวลา 18 ชั่วโมงจะหายไป, คุณสามารถมีไดโนฟรีของคุณได้ทุกวันตลอด 24 ชั่วโมงหากบัญชีของคุณได้รับการยืนยันแล้ว devcenter-staging.heroku.com/articles/free-dyno-hour-faq
bagonyi

76

ในความคิดของฉันการใช้ระดับ 'ฟรี' ของบริการไม่ควรเปิดใช้งานแอพพลิเคชั่นที่ผลิตหรือลูกค้าหันมาใช้งาน ในขณะที่วิธีการแก้ปัญหาข้างต้นทำงานกับ Dyno idling ให้คิดให้ละเอียดเกี่ยวกับสิ่งที่คุณทำ

หากไม่มีสิ่งอื่นใดให้ใช้งาน cron เพื่อ ping ไซต์ของคุณและปิดการใช้งานการตรวจสอบระยะเวลาการใช้งานต่ำที่ทราบ (เช่นข้ามคืน) เพื่อให้แน่ใจว่า Heroku จะไม่ทำสิ่งใดกับชั้นฟรีสำหรับคนอื่น


ขอบคุณสำหรับคำตอบ. คุณคิดว่า 'คิดอย่างละเอียดเกี่ยวกับสิ่งที่คุณกำลังทำ' โดยเฉพาะอะไร
sscirrus

36
ส่วนใหญ่สำหรับคนที่อ่านคำตอบข้างต้นสำหรับวิธีนี้ เป้าหมายของเทียร์ฟรีบน Heroku นั้นไม่ได้จัดทำแอพพลิเคชั่นที่จำเป็นสำหรับลูกค้า การไม่ทำงานของ Tier ฟรีช่วยให้ Heroku เสนอระดับนี้สำหรับการพัฒนา / ทดสอบโดยไม่มีค่าใช้จ่ายจำนวนมากในการใช้งานเซิร์ฟเวอร์อย่างต่อเนื่อง
drowe

29
นอกจากนี้ยังเป็นเรื่องดีสำหรับไซต์ "การผลิต" ที่มีปริมาณการใช้งานต่ำและไม่มีลูกค้าที่ชำระเงินซึ่งคุณไม่ต้องการรอสามสิบวินาทีสำหรับหน้าแรกที่จะโหลด
alxndr

2
คุณถูกต้อง แต่มีเหตุผลที่ถูกต้องมากสำหรับการทำงานเพียงหนึ่งไดโน ... เช่นมีการประสานงานเดียวที่มีบางรัฐในความทรงจำ ...
jonasfj

17
คุณไม่รู้อะไรมากเกี่ยวกับแอพของเขาดังนั้นฉันคิดว่าความคิดเห็นของคุณนั้นค่อนข้างยุติธรรม
wobbily_col

60

นอกจากนี้คุณยังสามารถลองhttp://kaffeine.herokuapp.com (สร้างโดยฉัน) เพื่อป้องกันไม่ให้แอป Heroku เข้าสู่โหมดสลีป มันจะ ping แอปของคุณทุก ๆ 10 นาทีเพื่อที่แอปของคุณจะไม่เข้าสู่โหมดสลีป ได้ฟรีอย่างสมบูรณ์


1
เป็นไปได้ไหมที่จะลบ herokuapp ออกจากบริการของคุณ?
ดาวตก

2
ไม่ยอมรับแอปใหม่อีกต่อไป หน้า GitHub มีปัญหาหลายประการเกี่ยวกับเรื่องนั้น คำตอบนี้ถือได้ว่าล้าสมัยแล้ว
nickolay.laptev

45

คุณสามารถใช้http://pingdom.com/เพื่อตรวจสอบแอปของคุณ ถ้าทำทุก ๆ นาที Heroku จะไม่ใช้งานแอพของคุณและไม่ต้องหมุน


2
ยากมากที่จะตัดสินใจเลือกระหว่างสองคำตอบ! ในที่สุดฉันก็ไปกับ Newrelic เพราะฉันมีบัญชีอยู่แล้ว ขอบคุณมากสำหรับคำแนะนำที่ยอดเยี่ยมนี้ - มันก็แก้ปัญหาของฉันได้เช่นกัน :) +1
sscirrus

2
ทำไมมันทุกนาที อย่างที่คุณเห็นในคำตอบของ @ newe1344 Heroku หมุนไดโนลงหลังจากไม่มีการใช้งานเป็นเวลาหนึ่งชั่วโมง แน่นอนว่าการ pining ทุก ๆ 59 นาทีนั้นมีประสิทธิภาพมากกว่าหรือไม่
ดาร์วินเทค

2
มันรายงานเมื่อมันหยุดทำงานดังนั้นความถี่นาทีทำงานได้ดีสำหรับทั้งการป้องกันการนอนหลับและการรายงานการหยุดทำงาน
Jesse Wolgamott

ฉันไม่คิดว่ามัน (ยัง?) ฟรี
rahulserver

@rahulserver - คุณถูกต้อง Pingdom ไม่มีบัญชีฟรีอีกต่อไป
John Lehmann

40

คำตอบง่าย ๆ - ถ้าคุณให้ความสำคัญกับการบริการแล้วชำระให้

'เคล็ดลับ' ทั้งหมดเหล่านี้เพื่อให้ได้รับประโยชน์จากบริการที่ชำระเงินแล้ว ... ก็เหมือนการขโมยสาย มีข้อสงสัยแม้กระทั่งแสดงไว้ที่นี่ ถัดไปมีเคล็ดลับเกี่ยวกับการละเมิดลิขสิทธิ์เกมอย่างไร

เช่นเดียวกับโปสเตอร์อื่น ๆ ที่นี่ฉันให้ความสำคัญกับบริการฟรีสำหรับการพัฒนาและการทดสอบและฉันจะรู้สึกรำคาญอย่างมากกับคุณทุกประเภทที่มีความบกพร่องทางจริยธรรมหาก Heroku กำจัดมันไปเพราะมันมีคนจำนวนมาก ฉันไม่คิดว่าเขาจะวิจารณ์โดยตรงพอ


14
มันเป็นบริการชำระเงินโดยมีเงื่อนไขบางอย่าง ทำไมไม่ปรับการใช้บริการให้เหมาะสมเพื่อให้ได้รับประโยชน์สูงสุด?
pkinsky

8
ฉันเชื่อว่าฉันได้ระบุเหตุผลไปแล้ว แต่การที่จะอธิบายให้ไกลออกไปอีกหน่อยการใช้โฮสติ้งฟรีนั้นชัดเจน และข้อดีของการ 'เปิดตลอด' คือความได้เปรียบของการจ่ายเงินแม้เพียงเล็กน้อยสำหรับพนักงานที่สอง การหาประโยชน์ทั้งหมดที่นี่เกี่ยวข้องกับการใช้ทรัพยากรอย่างสิ้นเปลืองเพื่อให้ได้รับเงินจากการใช้บริการ มันเป็นพฤติกรรมที่น่าละอาย ทำไมฉันต้องสนใจ? เพราะหากพวกเขาเบื่อหน่ายการขอความช่วยเหลือของพวกเขาจะต้องทำไปด้วยบริการฟรีซึ่งใช้ตามความตั้งใจมีค่ามากสำหรับฉัน
elc

2
โอเคเพียงเพื่อชี้แจงให้คุณทราบโดยผู้ลงคะแนนเสียงเขาไม่เพียง แต่ถามว่า "มีวิธีแก้ไขไหม?" เขายังถามว่า "ฉันควรจะจ่าย ... " นี่คือสิ่งที่ฉันตอบ มันเป็นคำถามพื้นฐาน แน่นอนว่ามีวิธีง่าย ๆ ในการหลีกเลี่ยง พวกเขาทำผิดจริยธรรมดังนั้นจึงเป็นการเสียเวลาอย่างดีที่สุดในการให้รายละเอียดเกี่ยวกับพวกเขาที่นี่
elc

4
นั่นเป็นการพูดเกินจริงเล็กน้อย เราปรับใช้กับ heroku ในขณะทดสอบ เมื่อลูกค้าของเราไปที่ไซต์เมื่อไม่ได้ใช้งานพวกเขาคิดว่ามีบางอย่างผิดปกติกับแอพที่เราพัฒนาขึ้นเพื่อเชื่อมต่อกับบริการ การรักษาไซต์ให้มีชีวิตอยู่เพื่อการตอบสนองในการสาธิตแอพที่ไม่เคยเห็นแสงของวันนั้นแทบจะผิดจรรยาบรรณ ฟังดูเหมือนเป็นการลงโทษส่วนตัวไม่ใช่จริยธรรม ถ้ามันไม่ได้ผิดกติกาหรือกฎหมายข้อสันนิษฐานทางจริยธรรมของคุณเป็นสิ่งเดียวที่ไม่ถูกต้อง Freemium เป็นรูปแบบธุรกิจที่ถูกกฎหมาย ไม่เป็นไรที่จะ "ใช้ประโยชน์" จากส่วนที่ฟรี มันคาดว่า
Matt Long

1
ดังนั้นการให้เหตุผลของคุณคือ "ทุกคนกำลังทำอยู่" นั่นไม่ใช่ข้อโต้แย้งใหม่ หรือคนที่น่าเชื่อถือ แก้ไขขออภัยคุณทำจุดที่ถูกต้องกับบางคน ว่าสิ่งที่กำลังทำไม่ได้ถูกห้ามอย่างชัดเจนดังนั้นจึงไม่ผิด ฉันรู้ว่ามีคนที่เชื่อว่า 'สิ่งที่ไม่ได้รับอนุญาตอย่างชัดแจ้งได้รับอนุญาต' และดำเนินการต่อไปเพื่อบอกว่าไม่เพียง แต่ได้รับอนุญาต แต่ไม่ใช่ 'ผิด' ทัศนคติทั้งหมดนั้นเป็นสิ่งที่ฉันจะอธิบายอย่างล้นหลามด้วยวิธีการรับใช้ด้วยตนเอง แต่มันลงมาเพื่อความแตกต่างทางปรัชญา fundemental
elc

30

ทดสอบและทำงานกับแอพ Heroku ของฉันเองโดยใช้ Node.js 0.10.x เมื่อวันที่ 6/28/2013

var http = require('http'); //importing http

function startKeepAlive() {
    setInterval(function() {
        var options = {
            host: 'your_app_name.herokuapp.com',
            port: 80,
            path: '/'
        };
        http.get(options, function(res) {
            res.on('data', function(chunk) {
                try {
                    // optional logging... disable after it's working
                    console.log("HEROKU RESPONSE: " + chunk);
                } catch (err) {
                    console.log(err.message);
                }
            });
        }).on('error', function(err) {
            console.log("Error: " + err.message);
        });
    }, 20 * 60 * 1000); // load every 20 minutes
}

startKeepAlive();

2
ในมุมมองของฉันทางออกที่ดีที่สุดเพราะมันไม่ได้พึ่งพาบริการบุคคลที่สามใด ๆ ขอบคุณ :)
electronix384128

ดูเหมือนว่ามันไม่ได้หลีกเลี่ยงการไปนอน แต่มันจะทำงานขึ้นโดยอัตโนมัติอีกครั้ง ฉันไม่รู้ว่าพฤติกรรมนี้เป็นเพราะการเปลี่ยนแปลงจริง ๆ แล้ววิธีแก้ปัญหาของคุณมาจากเกือบสองปีที่แล้ว
jgato

20

ฉันใช้โปรแกรมเสริมของ Heroku Scheduler ที่ Heroku ให้บริการฟรี เมื่อเพิ่มเข้ามามันเป็นเรื่องง่ายเหมือนการสร้างงานด้วย 'curl http://yourapp.herokuapp.com ' และช่วงเวลา 10 นาที


11

มีการระบุไว้ในเอกสารของ Heroku ว่าการมีเว็บไดโนมากกว่า 1 แห่งจะไม่มีการใช้ อาจเป็นทางออกที่ถูกกว่า $ 0.09 ต่อชั่วโมงเหมือนปิแอร์

ป้อนคำอธิบายรูปภาพที่นี่

เอกสาร


6
ส่วนเสริมของ Heroku นั้นเป็นรุ่นมาตรฐานฟรี
sscirrus

9

ฉันได้เขียนขั้นตอนลง:

➜เพิ่ม gem 'newrelic_rpm' ใน Gemfile ของคุณภายใต้การจัดเตรียมและการผลิต
➜การติดตั้งแบบรวมกลุ่ม
➜เข้าสู่แผงควบคุม heroku และเพิ่ม newrelic addon ใหม่
added เมื่อเพิ่มแล้วให้ตั้งค่า pinging อัตโนมัติในเว็บไซต์ของคุณเพื่อไม่ให้ใช้งาน
➜ ภายใต้การตั้งค่า) →คลิก“ เปิดการตรวจสอบความพร้อมใช้งาน”
➜ป้อน url เพื่อ ping (เช่น: http://spokenvote.org )
➜เลือก 1 นาทีสำหรับช่วงเวลา


3
ขอบคุณ Pratik FYI หากคุณ ping แอปของคุณทุกนาทีคุณจะใช้แบนด์วิดท์สูงขึ้นโดยไม่ได้รับประโยชน์ใด ๆ เว้นแต่คุณจะมีเหตุผลอื่นที่ปลอดภัยในการลดขนาดที่สัมผัส
sscirrus

ขอบคุณสำหรับคำแนะนำ @sscirrus
Pratik Khadloya

3
Heroku จะทำให้ dyno ของคุณเข้าสู่โหมดสลีปหลังจากไม่มีการใช้งานเป็นเวลา 1 ชั่วโมงดังนั้นคุณสามารถปรับช่วงเวลากลับไปเป็น 1 ชั่วโมง (หรืออาจจะเป็น 50 นาทีเพื่อให้ปลอดภัย)
David Underwood

คำถาม: คุณรู้ว่าจะเปลี่ยนช่วงเวลา ping นั้นหรือไม่? ดูเหมือนว่าจะไม่มีตัวเลือกในการตั้งค่าแผงควบคุม
mishap_n

4

ฉันพบไซต์ฟรีอื่นที่จะ ping เว็บไซต์ของคุณชื่อ Unidler อยู่ตลอดเวลา

http://unidler.herokuapp.com/

เหมือนกับ pingdom แต่ไม่จำเป็นต้องลงชื่อเข้าใช้


จะลบหลังจากเพิ่มได้อย่างไร
Lekr0

3

โปรดทราบว่า Dyno ประเภทใหม่ ( ปัจจุบันเป็นรุ่นเบต้าเข้ามาในเดือนมิถุนายน 2015) จะห้ามมิให้ Dyno ตื่นขึ้นมาฟรีตลอด 24/7 เพราะต้องนอนอย่างน้อย 6 ชั่วโมงต่อวัน

ดังนั้นให้ลองลบโซลูชันที่คุณพบในชุดข้อความนี้ออกมาก่อน (หรือชำระค่าบริการที่คุณใช้งานจริง)


3

หากคุณสามารถเข้าถึงเซิร์ฟเวอร์ยูนิกซ์ที่ทำงานอยู่เสมอคุณสามารถตั้งค่า cron job ให้กับGETเว็บไซต์ของคุณ ภายใต้ข้อกำหนดใหม่ของแผนฟรีคุณอาจต้องการปิดใช้งานGETs ในเวลากลางคืนโดยใช้บรรทัดใน crontab ของคุณดังนี้:

*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/null

สิ่งนี้แนะนำcurlให้GETdomain.com ทุก ๆ 20 นาทีระหว่างเวลา 8 ถึง 22 ชั่วโมง

ระวังตัวด้วย

  1. ไม่ใช่ทุกคนที่ต้องการเห็นเว็บไซต์ของคุณอาศัยอยู่ในเขตเวลาและ
  2. ไซต์ของคุณอาจได้รับคำขออื่น ๆ ในช่วงกลางดึกตื่นขึ้นมาจาก dyno ของคุณและทำให้อีกชั่วโมงของเวลาการใช้งานสำหรับแต่ละคำขอ แม้ว่าจะไม่มีใครรู้ว่าโดเมนของคุณมีบอทและซอฟต์แวร์รวบรวมข้อมูลที่ทำงานอยู่ตลอดเวลา ดังนั้นขอแนะนำให้ตั้งค่ากระบวนการที่กำหนดไว้ใน crontab ของคุณให้ใช้งานได้เพียง 14 ถึง 16 ชั่วโมงเพื่อให้บัฟเฟอร์กับการปลุกเหล่านี้

นอกจากนี้ตรวจสอบให้แน่ใจว่าเวลาระบบของคุณตั้งค่าไว้อย่างถูกต้องเพื่อให้หน้าต่างหยุดทำงานเกิดขึ้นเมื่อคุณคาดหวัง


3

คำตอบส่วนใหญ่ที่นี่ล้าสมัยหรือไม่ทำงาน ระดับฟรีปัจจุบันสำหรับบัญชีส่วนบุคคลจะให้ 550 Dyno ชั่วโมงในแต่ละเดือน

และบัญชีฟรีที่ผ่านการตรวจสอบแล้วจะช่วยให้คุณรับไดโนเวอร์ฟรี 1,000 ชั่วโมง ฉันเขียนบทความเกี่ยวกับวิธีทำให้แอพฟรีตื่นตัวอยู่เสมอ

https://link.medium.com/uDHrk5HAD0

หวังว่าจะช่วยให้ทุกคนที่ต้องการโซลูชันในปี 2562


2

งานนี้สำหรับฉันในแอปพลิเคชันฤดูใบไม้ผลิทำให้มีการร้องขอ http หนึ่งครั้งทุก ๆ 2 นาทีไปยังเส้นทางของ URL รูท `

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.client.RestTemplate;

public class HerokuNotIdle {

private static final Logger LOG = LoggerFactory.getLogger(HerokuNotIdle.class);

@Scheduled(fixedDelay=120000)
public void herokuNotIdle(){
    LOG.debug("Heroku not idle execution");
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getForObject("http://yourapp.herokuapp.com/", Object.class);
}
}

จำการกำหนดค่าบริบทของคุณเพื่อเปิดใช้งานกำหนดการและสร้าง bean สำหรับกำหนดการของคุณ

@EnableScheduling
public class AppConfig {

@Bean
public HerokuNotIdle herokuNotIdle(){
    return new HerokuNotIdle();
}
}


1

ฉันมีแอพที่ต้องทำงานตั้งแต่วันจันทร์ถึงวันศุกร์เวลาอาหารกลางวันเท่านั้น ฉันเพิ่งเพิ่มสคริปต์ต่อไปนี้ไปยัง crontab ในที่ทำงาน:

#!/bin/sh
# script to unidle heroku installation for the use with cronjob
# usage in crontab:
# */5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com
# The command /usr/local/bin/uptimer.sh http://www.example.com will execute every 5th minute of 11am through 3pm Mondays through Fridays in every month.
# resources: http://www.cronchecker.net
echo url to unidle: $1
echo [UPTIMER]: waking up at:
date
curl $1
echo [UPTIMER]: awake at:
date

ดังนั้นสำหรับแอปใด ๆ เพียงแค่วางสายอื่นใน crontab ของคุณเช่น:

*/5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com

1

ฉันคิดว่าการแก้ไขที่ง่ายที่สุดคือการ ping เซิร์ฟเวอร์ของคุณเองทุก ๆ 30 นาที นี่คือรหัสที่ฉันใช้ในโปรเจ็กต์ node.js เพื่อป้องกันการหลับ

const request = require('request');
const ping = () => request('https://<my-app-name>.herokuapp.com/', (error, response, body) => {
    console.log('error:', error); // Print the error if one occurred
    console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
    console.log('body:', body); // Print body of response received
});
setInterval(ping, 20*60*1000); // I have set to 20 mins interval

1

อีกหนึ่งวิธีแก้ปัญหาการทำงาน: wokeDyno นี่คือการโพสต์บล็อกวิธีการทำงาน: มันรวมอยู่ในแอปง่ายมาก:

/* Example: as used with an Express app */

const express = require("express")
const wakeDyno = require("woke-dyno");

// create an Express app
const app = express();

// start the server, then call wokeDyno(url).start()
app.listen(PORT, () => {
    wakeDyno(DYNO_URL).start(); // DYNO_URL should be the url of your Heroku app
});

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.