Как использовать Elasticsearch на Heroku

Я только что закончил просмотр эпизодов Railscasts на Elasticsearch. Я также пошел вперед и внедрил его в приложение rails (3.1), и все работает отлично. Как я хочу развернуть свое приложение в Heroku, но я не уверен, как заставить Elasticsearch работать на Heroku (в частности, на стек кедра).

Любая помощь будет принята с благодарностью!

Ответ 2

Вы можете очень легко [и свободно;-)] сворачивать свой собственный сервер ElasticSearch на Amazon EC2 и просто подключаться к нему с вашим приложением. Это то, что мы делаем, и оно прекрасно работает...

http://www.elasticsearch.org/tutorials/elasticsearch-on-ec2/

Ответ 3

Я создал модуль платформы Play, который будет запускать Elastic Search на Heroku, используя S3, чтобы сохранить состояние. Нет необходимости в экземпляре EC2 - вы платите только за стоимость данных S3, что намного меньше - в основном транзакции ввода-вывода. Он использует шлюз ElasticSearch S3 (механизм сохранения).

Вы можете использовать его либо путем расширения приложения Play для создания определенных конечных точек для ваших функций поиска, либо, если хотите, вы можете напрямую обратиться к API ElasticSearch REST (по умолчанию он предоставляет его на маршруте http://yourapp.com/es). Для обеспечения безопасности существует очень простая система аутентификации.

Единственным недостатком этой настройки является то, что dyno может занять некоторое время, чтобы развернуться. Таким образом, это не сработает, если вы дадите динамику отступить от бездействия - и вы можете получить пригвожденные для S3 платы за передачу данных, если это происходит очень часто, а ваш индекс огромен. Потенциал роста - это контроль ваших собственных данных, и это дешево дешево дешево. Еще одно предупреждение - вам нужно быть осторожным, чтобы держаться внутри пределов памяти динара Heroku. Тем не менее, у нас были полнотекстовые функции автозаполнения, работающие над несколькими индексами без проблем.

Возможно, вы сможете создать аналогичный модуль в Rails, используя JRuby, чтобы поговорить с API Java ElasticSearch. Мой главный вклад здесь заключался в том, как запустить его в другой веб-среде - поскольку Play также использует Netty, было довольно легко встроить его. Тесты производительности по сравнению с кластером EC2 + Tire (Rails gem для ElasticSearch) показали, что подход Heroku/Play выполнял более быстрый поиск.

Проект находится здесь: https://github.com/carchrae/elastic-play - Я был бы рад помочь людям настроить его - это должно быть довольно безболезненно.

Ответ 4

Это была моя первая мысль, когда я смотрел RailsCast, но, к сожалению, это демон java, который он запускает, что невозможно на Heroku.

Ответ 5

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