Rails + Dalli memcache gem: DalliError: нет доступных серверов
Привет, У меня возникли проблемы с настройкой моего проекта Rails на моем сервере, потому что apache продолжает жаловаться
DalliError: No server available
.
Я установил memcached
на мой компьютер ubuntu, но он все еще не работает. Проект rails также имеет config.cache_store = :dalli_store, 'localhost:11211', { :namespace => "production" }
в средах /production.rb. Как мне отладить это?
Мой журнал показывает перед каждым запросом:
localhost:11211 failed (count: 6)
DalliError: No server available
telnet to 11211:
[email protected]:/usr/local/www/production/current/log# telnet localhost 11211
Trying 127.0.1.1...
telnet: Unable to connect to remote host: Connection refused
Ответы
Ответ 1
У меня была та же проблема.
Сначала я установил memcached как драгоценный камень
gem install memcached
и получил ошибку "DalliError: сервер недоступен"
Затем я установил memcached, выполнив
sudo apt-get install memcached
.
Теперь он отлично работает.
Ответ 2
Если вы являетесь пользователем Homebrew:
brew install memcached
Проверьте, запущена ли служба:
brew services list
Если нет, запустите его:
brew services start memcached
Ответ 3
Это произошло потому, что кто-то изменил файл /etc/hosts
на точку 127.0.1.1
на localhost вместо 127.0.0.1
. После этого, memcached
работал.
Ответ 4
Принятый ответ, вероятно, решит проблему для 95% людей, которые видят эту ошибку, но в моем случае я нашел проблему более фундаментальной:
На сервере мне не удалось ping 127.0.0.1
. Это означало, что Dalli
не удалось подключиться к серверу memcache
, который по умолчанию работает на 127.0.0.1:11211
.
Есть ряд вещей, которые могут вызвать эту проблему, но, скорее всего, это просто недостающий сетевой интерфейс. Если вы запустите ifconfig
, вы увидите что-то подобное в выводе:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:15686 errors:0 dropped:0 overruns:0 frame:0
TX packets:15686 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:23730314 (23.7 MB) TX bytes:23730314 (23.7 MB)
Если этого не хватает, убедитесь, что ваш файл /etc/network/interfaces
содержит следующее определение локального интерфейса:
auto lo
iface lo inet loopback
И затем перезапустите сетевую службу:
sudo /etc/init.d/networking restart
Ответ 5
Использование 127.0.0.1
вместо localhost
должно решить вашу (и мою) проблему.
config.cache_store = :dalli_store, '127.0.0.1:11211', { namespace: 'production' }
Ответ 6
В моем случае я недавно обновил memcached на сервере, но демон Ruby продолжал выполнять обновление. После простого перезапуска демона Ruby ошибки исчезли. (Я также перезапустил mechached.)