Mam aplikację RoR na AWS. Moja aplikacja używa SolR do wyszukiwarki, ale po każdym wdrożeniu aplikacja nie może ponownie indeksować. Muszę więc zresetować uprawnienia i ponownie uruchomić system Solr ręcznie za pomocą:Automatyczne ponowne uruchomienie SolR po wdrożeniu Elastic Beanstalk
chmod 777 -R /solr /tmp /log
RAILS_ENV=production rake sunspot:solr:stop # or I kill the processus if it doesn't work :D
RAILS_ENV=production rake sunspot:solr:start
RAILS_ENV=production rake sunspot:reindex
Teraz próbuję skonfigurować go jako rozszerzenie eb do automatyzacji wdrożenia. Oto co próbowałem w moich .ebextensions/deploy.config:
container_commands:
1_change_permissions:
command: chmod 700 .ebextensions/setup.sh
2_restart_solr:
command: bash .ebextensions/setup.sh
A oto setup.sh scenariusz:
#!/bin/bash
chmod 777 -R solr/ log/ tmp/
RAILS_ENV=production rake sunspot:solr:restart
Rezultatem jest rozmieszczenie nie fail, ale tylko uprawnienia są zmieniane poprawnie, a usługa solr jest uruchomiona, ale kiedy próbuję coś indeksować, to się nie powiedzie (zapytanie działa poprawnie).
Próbowałem też zatrzymać serwer przed aplikacja jest wdrażany przez dodanie nie komend blok w moich .ebextensions/deploy.config (i zmieniłem skrypt sh, aby uruchomić usługę zamiast restartu):
commands:
1_stop_solr:
command: cd /var/app/current & RAILS_ENV=production rake sunspot:solr:stop
mam ten błąd (nie wiem skąd jest on wykonywany):
[2015-06-25T09: 51: 35.510Z] Information [13207] - [CMD-AppDeploy/AppDeployStage0/EbExtensionPreBuild/Infra-EmbeddedPreBuild/prebuild_0_My_First_Elastic_Beanstalk_Application/Comm i 1_stop_solr]: wykonanie działania nie powiodło się, ponieważ: rake został przerwany! nie mógł znaleźć środowisku domowym - rozszerzenie `~”
EDIT 1 (poniższy komentarz Jay): Proces indeksacji odbywa się przy zapisywaniu obiektów.
Oto przykład dla podmiotu (i gdzie to się nie powiedzie):
class Document < ActiveRecord::Base
# .....
# SolR entity
searchable do
text :title, :description, :tags
integer :user_id
end
# .....
end
** EDIT 2: **
odpowiedź Jamesa nie rozwiąże problemu, ale zdaję sobie sprawę, że ręcznie na moim instancji EC2, mogę tylko uruchomić 2 następujące wiersze:
chmod 777 -R solr/ tmp/ log/
RAILS_ENV=production rake sunspot:reindex"
Próbuję użyć linku Jamesa utworzyć skrypt post-rozmieszczenia oraz chmod działa dobrze, ale kiedy dodać komenda REINDEX do pliku, rozmieszczenie nie powiedzie się z tego błędu:
[2015-07-07T16:26:25.509Z] INFO [20402] - [CMD-AppDeploy/AppDeployStage1/AppDeployPostHook/99_restart_delayed_job.sh] : Activity execution failed, because: rake aborted!
Could not find rake-10.4.2 in any of the sources
/var/app/current/config/boot.rb:3:in `<top (required)>'
/var/app/current/config/application.rb:1:in `<top (required)>'
/var/app/current/Rakefile:4:in `<top (required)>'
Ponadto, jeśli próbuję ręcznie uruchomić komendę (po skrypcie chmod po wysunięciu), nie jest on z 500 błędów na każdej pozycji reindex. Więc muszę zabić serwer solr, rozpocząć, a następnie ponownie zindeksować.
To naprawdę bolesne :)
W jaki sposób indeksujesz dokumenty? Korzystasz ze skryptu? Za pomocą pliku post.jar z solr? Domyślam się, że proces, który indeksuje, nie ma uprawnień do zapisu w folderze indeksu solr. To może wyjaśnić, dlaczego możesz zapytać (wymagane tylko uprawnienie do odczytu), ale nie można indeksować. – jay
Zaktualizowałem swój post na przykładzie indeksacji. Dzięki za pomoc! –