2014-04-30 28 views
6

Đây là lần đầu tiên tôi lên lịch một tác vụ và tôi không chắc chắn về việc triển khai tốt nhất (hoặc triển khai đúng).Ruby on rail các nhiệm vụ được lên lịch

Mục tiêu của tôi: Tôi có ruby ​​trên đường ray 4 thiết lập ứng dụng với twilio và được triển khai trên Heroku. Tôi muốn ứng dụng tự động nhắn tin cho tất cả người dùng của tôi mỗi tuần một lần bằng một tin nhắn văn bản tùy chỉnh (được viết và tạo bởi thông tin trong cơ sở dữ liệu).

Từ nghiên cứu tôi đã đi đến các Gems sau: WheneverRufus-Scheduler.

Tôi tin rằng cả hai loại đá quý này đều có thể thực hiện công việc, nhưng khi đọc trên tài liệu của Rufus: "xin lưu ý: rufus-scheduler không phải là thay thế cron" Tôi đã cố gắng hiểu nếu tôi muốn một công việc cron hoặc "Rufus-Scheduler".

Tôi còn lại với các câu hỏi sau: Công việc định kỳ là gì và khi nào là thời điểm thích hợp để sử dụng? Tại sao Rufus-Scheduler không phải là một cron thay thế và nó làm gì khác? Tôi nên sử dụng cái nào?

Trả lời

1

Về Cron:

Cron là tên của chương trình mà không lên kế hoạch nhiệm vụ trên hệ thống nix. Nhiệm vụ theo lịch trình là gì trong Windows, Cron thực hiện điều gì đó tương tự cho Linux ở mức khái niệm.Cron là một trong những công cụ hữu ích nhất trong Linux hoặc UNIX giống như các hệ điều hành. Dịch vụ cron (daemon) chạy trong nền và liên tục kiểm tra tệp/etc/crontab và/etc/cron./thư mục. Nó cũng kiểm tra thư mục/var/spool/cron /.

Đối với nhiệm vụ Scheduling trên Heroku

Tin tốt là trên Heroku có một điều được gọi là Scheduler đó là một add-on cho công việc đang chạy trên ứng dụng của bạn tại các khoảng thời gian dự kiến, giống như cron trong một truyền thống môi trường máy chủ. vì vậy bạn thực sự không cần phải fiddle/người chơi với cron hoặc đá quý như bất cứ khi nào. chỉ cần sử dụng addon Scheduler trên Heroku.

Đối với Thông tin thêm xem: https://devcenter.heroku.com/articles/scheduler

+0

Vâng, Heroku Scheduler dường như giống như một lựa chọn tuyệt vời, tôi là một chút tắt bởi nó khi tôi tiếp tục đọc trong tài liệu của nó "Scheduler có một vấn đề được biết đến trong đó dự kiến các quá trình đôi khi bị bỏ qua " – stecd

+0

Tôi tin rằng đây sẽ là câu trả lời đúng nếu Bộ lập lịch tác vụ Heroku thực sự cho phép lên lịch các tác vụ mỗi tuần một lần thay vì mỗi ngày một lần. – stecd

+0

stecd: không có gì ngăn cản bạn có một lịch trình kích hoạt mỗi ngày nhưng điều đó chỉ làm điều gì đó vào các ngày chủ nhật. 'if day! = chủ nhật rồi không làm gì và trả về'. – jmettraux

1

Một công việc định kỳ là một chương trình chạy trên một lịch trình thời gian tự động, sử dụng phần mềm cron.

Trình lập lịch biểu Rufus khác với cron vì nó chạy bên trong các quy trình Ruby.

Đối với những gì bạn mô tả tôi tin là sẽ ổn thôi.

0

whenever cho phép bạn viết mã ruby ​​sẽ được chuyển đổi thành tệp crontab, là tệp chỉ định một bộ lệnh và tần suất cho mỗi lệnh. Tệp này được sử dụng bởi cron.

rufus-scheduler là ruby ​​tinh khiết, bạn viết ruby ​​và công việc đang chạy trong ruby, ví dụ bên trong vòng lặp ứng dụng của bạn gọi scheduler.join hoặc trong một chủ đề khác gọi là ruby your/rufus_scheduler_script.rb.

Theo ý kiến ​​của tôi, họ làm những điều tương tự, với cron bạn đang sử dụng lệnh linux, nhưng tôi không thấy bất kỳ sự khác biệt nào khác.

other options too, theo kinh nghiệm của tôi, tôi gặp vấn đề với rufus-scheduler, và bất cứ khi nào (họ không tìm thấy các lớp trong ứng dụng Rails của tôi, nhưng có thể chỉ là một quirk), ở mặt bên kia làm việc cho tôi.

2

rufus-scheduler không phải là một sự thay thế cron

có thể được mở rộng để "rufus-scheduler không bao giờ được viết như một thả thay thế cho cron". Thông điệp lớn hơn là "bạn là nhà phát triển và là nhà phát triển, bạn nên biết môi trường bạn kế thừa và các công cụ đi kèm. Bạn nên biết khi nào nên sử dụng chúng, khi bắt chước chúng, khi nào nên thay thế chúng".

Trình lập lịch biểu Rufus hiểu cú pháp "* * * * *" của Cron. Điều này đã khiến một số người nói "rufus-scheduler cố gắng để được thay thế Cron". Nó có thể tốt hơn được xây dựng là "một số người đã lạm dụng rufus-scheduler thay vì suy nghĩ (biết) rằng Cron trung thành cũ sẽ tốt hơn trong tình hình đó".

Để trở thành một nhà phát triển tốt, bạn nên suy nghĩ nghiêm túc về một số kỹ năng * nix sysadmin, nếu không bạn sẽ là một nỗi đau để làm việc. Nó có thể dễ dàng như "cài đặt, chạy và quản lý một hộp linux trong một VirtualBox trong hệ thống của bạn".

Lịch biểu rufus-scheduler chạy trong quá trình Ruby. Trong thế giới vanilla, một trình chạy rufus-scheduler trong cùng một quy trình Ruby mà các dịch vụ http yêu cầu (Rails hoặc ứng dụng web Sinatra), và, oh, oops, lịch trình không chạy khi ứng dụng không chạy.

Cron là dịch vụ được cung cấp bởi hệ điều hành * nix của bạn. Các ứng dụng và dịch vụ khác trên máy chủ của bạn dựa vào nó. Cron đọc crontab của nó và chạy kịch bản được chỉ ra trong nó tại thời điểm đã cho. Nhờ có sự kiện tuyệt vời Bất cứ khi nào, Cron có thể được yêu cầu chạy các tập lệnh trong ứng dụng Rails của bạn.

này có thể bạn quan tâm cũng như: https://devcenter.heroku.com/articles/clock-processes-ruby

Các vấn đề liên quan