6

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 :)

+0

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

+0

Zaktualizowałem swój post na przykładzie indeksacji. Dzięki za pomoc! –

Odpowiedz

1

ja nic o Beanstalk wiem, ale wygląda na to, że powłoki wykonującego swoje polecenia nie posiada zmiennych środowiskowych nie zwariować.Zakładając, że ten blog post post-deployment scripts jest prawidłowa, należy być w stanie zmienić swój skrypt setup.sh do czegoś takiego:

#!/usr/bin/env bash 
. /opt/elasticbeanstalk/support/envvars 
cd $EB_CONFIG_APP_CURRENT 
su -c "RAILS_ENV=production /usr/local/bin/rvm 2.2 do rake sunspot:solr:restart" $EB_CONFIG_APP_USER 
+0

Dziękuję Jamesowi za odpowiedź, ale to nie rozwiązuje mojego problemu. Dodałem część EDIT2 do mojego głównego posta, aby wyjaśnić, co próbowałem. –

+0

Zdecydowanie problem środowiskowy. Wygląda na to, że EB może używać RVM? Wypróbuj zaktualizowany skrypt. Być może będziesz musiał zagrać z nim, aby uzyskać właściwą ścieżkę RVM i wersję Ruby. –

+0

Nie używam RVM na serwerze. Zwykle polecenie jest wykonywane przez cały pakiet, ale też nie działa. Kiedy przyjrzeć się głębiej, nie widzę żadnego eksportu wariacji EB_ * w pliku/opt/elasticbeanstalk/support/envvars. Powinno być w nim, prawda? Czy muszę ustawić je ręcznie? Bo gdy próbuję drukować zmienne, to nic nie zwraca. –

0

wiem, że to jest stare pytanie, ale ja napisałem skrypt ebextensions, który wydaje się działać dobrze dla ta sprawa. Mam nadzieję, że pomoże to, jeśli ludzie nadal napotykają ten problem.

commands: 
    000_sudo: 
     command: sudo su 
    001_cd_to_app: 
     command: cd /var/app/current 
    002_rm_solr: 
     command: rm -rf solr/ 
    003_start_solr: 
     command: bundle exec rails sunspot:solr:start RAILS_ENV=production 
    004_reindex_solr: 
     command: bundle exec rails sunspot:solr:reindex RAILS_ENV=production 
Powiązane problemy