Как вернуть значение из сценария, который я отправляю в Монго? - PullRequest
2 голосов
/ 04 января 2012

У меня есть набор задач администрирования базы данных, которые нужно запускать после некоторых других граблей. Поэтому я прочитал исходный код драйвера Ruby Mongo и несколько постов в блоге, и у меня получился следующий код:

scr = open("./scripts/update_stats.js", &:read)
db = Mongoid::Config::master
result = db.command({:$eval => scr})
logger.debug result
logger.warn "Finished updating stats"

В скрипте у меня есть несколько функций и одна последняя:

r = update_stats();
print("update result:");
print (r);

Хорошо, так что все работает нормально, когда я запускаю его напрямую через командную строку. Ну, похоже. Но я хотел бы взять значение результата и сохранить его в своих журналах. Я мог бы сохранить значение в базе данных, а затем вытащить его, я полагаю. Кажется, должен быть лучший способ. То, что я делаю, получают мои журналы:

DEBUG 2012-01-03 22:27:03 -0800 (21392) {"retval"=>nil, "ok"=>1.0}

Это не говорит мне ничего, кроме того, что оно не взорвалось. Итак, как я могу получить возвращенное значение update_stats и записать его в свой код Ruby?

1 Ответ

1 голос
/ 04 января 2012

ОК, поэтому здесь есть две потенциальные проблемы.

Первая проблема заключается в том, что вы запускаете файл JS для базы данных, но я не совсем понимаю, как это работает.Это похоже на какую-то особенность Mongoid?Какой результат вы ожидаете?

Вторая проблема заключается в том, что не совсем понятно, зачем вы вообще используете файл JS, если у грабли есть доступ к драйверу.Какие команды вы выполняете, которые не могут быть просто запущены как команды через драйвер Ruby напрямую?

Как правило, единственный раз, когда вам нужно ввести произвольный файл JS, это когда вы вызываете задания напрямую через mongo программа.Таким образом, вы будете запускать mongo my_map_reduce.js из задания cron, и это будет иметь смысл.

Если команды, которые вы запускаете, доступны через драйвер (, то это верно в 99% случаев ).Тогда просто напишите весь скрипт администратора на Ruby.

...