workling не работает, когда база данных не работает в моем приложении rails - PullRequest
0 голосов
/ 26 ноября 2010

Я хочу запланировать моего работника, использующего задание cron, периодически проверять соединение с базой данных (скажем, через 5 минут) и соответственно обновлять ключ memcache. так что в моем приложении, если я найду переменную memcache для установки. Я отображаю свои страницы иначе, когда база данных работает.

Но проблема в том, что рабочий запускается, когда база данных не работает. когда база данных работает. он правильно обнаруживает, что соединение с базой данных присутствует, и обновляет переменную memcache, и все работает нормально.

Я не знаю, почему рабочий не запускается, когда база данных не работает. Ухожу на крайний срок. любая помощь очень ценится!

Обновление:

Это ошибка, которую я получаю, когда работа не начинается

/ приложения / Symantec / Шаста / сайт / установить / местные / рубин-1.8.7-P299 / Lib / рубин / драгоценные камни / 1,8 / драгоценные камни / ActiveRecord-2.1.1 / Библиотека / active_record / connection_adapters / mysql_adapter.rb: 527: в real_connect': Can't connect to MySQL server on '10.223.2.50' (111) (Mysql::Error) from /apps/Symantec/shasta/website/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:35:in присоединиться из /apps/Symantec/shasta/website/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:35:in listen' from /apps/Symantec/shasta/website/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:35:in каждый ' из /apps/Symantec/shasta/website/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:35:in listen' from /apps/Symantec/shasta/website/vendor/plugins/workling/script/listen.rb:19 from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/application.rb:203:in загрузить ' из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/application.rb:203:in start_load' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/application.rb:296:in начало» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:51:in watch' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:51:in вилка» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:51:in watch' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:45:in каждый» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:45:in watch' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:44:in петля» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:44:in watch' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:84:in start_with_pidfile» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:64:in fork' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:64:in start_with_pidfile» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/monitor.rb:111:in start' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/application_group.rb:149:in create_monitor» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/application.rb:283:in start' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/controller.rb:70:in беги» из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons.rb:143:in run' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/cmdline.rb:112:in вызов' из /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons/cmdline.rb:112:in catch_exceptions' from /apps/Symantec/shasta/website/install/local/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/daemons-1.1.0/lib/daemons.rb:142:in беги» из скрипта / workling_starling_client: 17

1 Ответ

1 голос
/ 26 ноября 2010

Может, рабочий пытается подключиться к базе данных при запуске (всегда) и выдает исключение? У вас есть какие-либо ошибки, зарегистрированные работником?

Вы написали свой рабочий в Rails? Может быть, написать сценарий оболочки, который будет предполагать, что база данных не работает, когда работник не может запустить?

ОБНОВЛЕНИЕ: в вашей трассировке стека есть начальная точка: script/workling_starling_client:17. Что там, в строке 17?

В первой строке (само сообщение об исключении) говорится, что « real_connect ': не удается подключиться к серверу MySQL в« 10 .223.2.50 »(111) (Mysql :: Error) », затем будет достаточно, если вы поместите строку 17 (возможно, с несколькими другими) в блок «спасения» и проверите сообщение об ошибке, содержит ли оно искомый ответ:

(Конечно, не останавливайтесь на достигнутом. Продолжайте проверку, поскольку отсутствие исключений не означает, что соединение установлено)

begin
  line_17_is_here
rescue => e
  if e.message =~ /Can't connect to MySQL/
    handle_your_no_connection_state
  else
    raise e
  end
end

Вопрос в том, можете ли вы обрабатывать состояние отсутствия соединения без ActiveRecord?

...