6

Ich habe eine RoR-Anwendung auf AWS. Meine App verwendet SolR für die Suchmaschine, aber nach jeder Bereitstellung kann die App nicht erneut indexieren. Also muss ich Berechtigungen zurücksetzen und neu starten Solr manuell mit:Automatischer Neustart von SolR nach Elastic Beanstalk Bereitstellung

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 

Jetzt ist es als eb Erweiterung Setup Ich versuche, die Bereitstellung zu automatisieren. Hier ist, was ich versuchte, in meinem .ebextensions/deploy.config:

container_commands: 
    1_change_permissions: 
    command: chmod 700 .ebextensions/setup.sh 
    2_restart_solr: 
    command: bash .ebextensions/setup.sh 

Und hier sind die setup.sh Skript:

#!/bin/bash 
chmod 777 -R solr/ log/ tmp/ 
RAILS_ENV=production rake sunspot:solr:restart 

Das Ergebnis ist der Einsatz nicht funktioniert scheitern aber, nur die Berechtigungen werden korrekt geändert, und der Solr-Dienst wird ausgeführt, aber wenn ich versuche, etwas zu indizieren, schlägt es fehl (die Abfrage funktioniert einwandfrei).

Ich habe versucht, auch den Server zu stoppen, bevor die App durch Hinzufügen eines Befehle Block in meinem .ebextensions/deploy.config (und ich änderte meine sh Skript den Dienst statt Neustart zu starten) eingesetzt wird:

commands: 
    1_stop_solr: 
    command: cd /var/app/current & RAILS_ENV=production rake sunspot:solr:stop 

ich habe diesen Fehler (ich weiß nicht, von wo aus es ausgeführt wird):

[2015-06-25T09: 51: 35.510Z] INFO [13207] - [CMD-AppDeploy/AppDeployStage0/EbExtensionPreBuild/Infra-EmbeddedPreBuild/prebuild_0_My_First_Elastic_Beanstalk_Application/Comm und 1_stop_solr]: Die Ausführung der Aktivität ist fehlgeschlagen, weil: rake abgebrochen wurde! konnte nicht HOME Umgebung finden - Erweiterung `~‘

EDIT 1 (nach jay Kommentar): Der Indexierungsprozess durchgeführt wird, wenn ich die Objekte speichern. Hier

ist ein Beispiel für ein Unternehmen (und wo es nicht):

class Document < ActiveRecord::Base 

    # ..... 

    # SolR entity 
    searchable do 
    text :title, :description, :tags 
    integer :user_id 
    end 

    # ..... 

end 

** EDIT 2: **

James Antwort nicht das Problem beheben, aber Ich weiß, dass manuell auf meine EC2-Instanz, kann ich nur die zwei folgenden Zeilen aus:

chmod 777 -R solr/ tmp/ log/ 
RAILS_ENV=production rake sunspot:reindex" 

ich habe versucht, James' Link zu verwenden, um einen Post-Deployment-Skript zu erstellen, und die chmod funktioniert gut, aber wenn ich hinzufügen der reindex Befehl in die Datei, der Einsatz mit diesem Fehler fehlschlägt:

[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)>' 

Auch, wenn ich versuche, den Befehl manuell ausführen (nach dem Post-Deployment-Skript chmod), schlägt es mit 500 Fehlern auf jedes Element neu indizieren. Also muss ich den Solr Server beenden, starten und dann neu indizieren.

Es ist wirklich schmerzhaft :)

+0

Wie indexieren Sie Dokumente? Ein Skript verwenden? Verwenden Sie post.jar-Datei von solr? Meine Vermutung ist, dass der Prozess, der Indizes hat keine Schreibrechte für den Indexordner von solr. Das könnte erklären, warum Sie abfragen können (nur Leseberechtigung erforderlich), aber nicht indizieren kann. – jay

+0

Ich habe meinen Beitrag mit einem Indexierungsbeispiel aktualisiert. Danke für deine Hilfe! –

Antwort

1

Ich weiß nichts über Bohnenstange, aber es sieht aus wie die Schale, die Ihre Befehle ausführen ist nicht über die Umgebungsvariablen Sie erwarten.Unter der Annahme, diese Blog-Post auf post-deployment scripts korrekt ist, sollten Sie in der Lage sein, Ihre setup.sh Skript etwas zu ändern:

#!/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

Danke James für deine Antwort, aber es behebt mein Problem nicht. Ich habe einen EDIT2-Teil in meinem Hauptbeitrag hinzugefügt, um zu erklären, was ich versucht habe. –

+0

Definitiv ein Umgebungsproblem. Sieht so aus, als würde EB RVM verwenden? Probieren Sie das aktualisierte Skript aus. Möglicherweise müssen Sie damit spielen, um den richtigen RVM-Pfad und die Ruby-Version zu erhalten. –

+0

Ich verwende RVM nicht auf dem Server. Normalerweise wird der Befehl über Bundler ausgeführt, funktioniert aber auch nicht. Wenn ich genauer hinsehe, kann ich keinen Export von EB_ * vars in der Datei/opt/elasticbeanstalk/support/envvars sehen. Es sollte drin sein, oder? Muss ich diese manuell einstellen? Wenn ich versuche, die Variablen zu drucken, gibt es nichts zurück. –

0

Ich weiß, dass dies eine alte Frage, aber ich habe einen ebextensions Skript geschrieben, das gut zu funktionieren scheint für dieser Fall. Hoffentlich wird dies helfen, wenn die Menschen immer noch auf dieses Problem stoßen.

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 
Verwandte Themen