Что лучший способ состоит в том, чтобы выполнить системные задачи от Ruby on Rails?

Это даже не близко к вопросу.

Однако ... измените строку 5 вашего сообщения на:

Indexes: "college_pk" PRIMARY KEY, btree (:user_id, :dept)

5
задан John Topley 23 September 2010 в 16:09
поделиться

4 ответа

Можно использовать BackgrounDRb. Его цель состоит в том, чтобы разгрузить задачи из приложений для направляющих, и можно выполнить сервер при другом пользователе.

3
ответ дан 14 December 2019 в 13:50
поделиться

Была серия эпизодов RailsCasts, которые покрыли фоновые задачи.

Наиболее подходяще к Вашей проблеме, возможно, "Загребают Фон", который мог быть хорошей начальной точкой? Как следует из названия это покрывает задачи граблей инициирования от Ruby on Rails.

Самое очевидное решение изменения параметров настройки системы состояло бы в том, чтобы иметь демона, работающего как корень, который принимает некоторых (очень ограниченный и строго санированный) исходные данные, такие как новое имя хоста или новый IP-адрес для сервера.. Другие эпизоды "Starling и Workling" и "Пользовательский Демон" могут помочь с этим также.

Более чистое решение состояло бы в том, чтобы использовать sudo. Существует два (подобных) способа сделать это, я могу думать:

Предоставьте sudo доступ к определенным командам (как hostname, ifconfig) пользователю, который выполнит задачи граблей. Это может иметь большие проблемы безопасности. Мой любимый пример этого предоставляет sudo доступ к энергии, которая кажется безвредной, пока Вы не работаете sudo vim, затем !bash и внезапно у Вас есть доступ полного корня к машине с помощью текстового редактора..

Другой путь (который легче сделать надежно) - имеет задачу граблей (или несколько отдельных сценариев), который выполняет необходимые задачи (изменяющий имя хоста, например). Скажите, /usr/bin/myapp_systemtasks принадлежавший root:root, затем предоставьте sudo доступ к тому сценарию. Удостоверьтесь, что Вы очень стараетесь санировать вход, который сценарий принимает (для предотвращения вещей как выход оболочки).

Так, существуют способы сделать это, но в конце дня Вы делаете веб-интерфейс к конфигурациям системного уровня, который очень трудно сделать надежно.. Независимо от того, что Вы решаете сделать, удостоверьтесь, что это хорошо протестировало (Вами и другими)

3
ответ дан 14 December 2019 в 13:50
поделиться

Один человек предложил использовать что-то как result = %x[uptime] и указал на меня на это очень полезное сообщение в блоге. Я думаю, что это осуществимо путем объединения своего рода сценария обертки, который называют с sudo и имеет соответствующие полномочия в sudoers.

0
ответ дан 14 December 2019 в 13:50
поделиться

Я сделал подобные задачи со Скворцом, который является действительно просто сервером организации очередей. Это очень просто в использовании, и можно выполнить рабочие потоки при другом пользователе легко.

Одно преимущество для скворца состоит в том, что он журналирует очередь поэтому, если существуют проблемы, он может воссоздать очередь.

require 'starling'
starling = Starling.new('127.0.0.1:22122')
starling.set('my_queue', 12345)

Затем Ваш рабочий может просто исключить любые задачи из очереди:

require 'starling'
loop do
  starling.get('my_queue') # this will block until something gets added to the queue
  # do stuff
end
0
ответ дан 14 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: