在AWS Elastic Beanstalk上使用Django - Oscar自动设置Apache Solr

Tui*_*noe 8 django solr django-oscar amazon-elastic-beanstalk

我需要确保Apache Solr与我的django-oscar应用程序一起安装,并且已经使用这些指令和.ebextensions配置文件来自动安装Solr并重建索引.

这是.ebextensions/03_solr.config

container_commands:
  01_install_solr:
    command: "wget http://archive.apache.org/dist/lucene/solr/4.7.2/solr-4.7.2.tgz &&
    tar xzf solr-4.7.2.tgz &&
    cd solr-4.7.2.example/solr/collection1 && 
    mv conf conf.original && 
    ln -s /opt/python/current/app/deploy/solr conf &&
    cd ../.. && 
    java -jar start.jar"
  02_rebuild_index:
    command: "python manage.py rebuild_index --noinput"
Run Code Online (Sandbox Code Playgroud)

我需要在此处添加/更新以使solr自动安装

eb deploy
Run Code Online (Sandbox Code Playgroud)

更新:将bash更改为单个命令.看起来这个过程正在完成,但在执行java -jar start.jar时,.ebextensions/03_solr.config任务执行了

org.eclipse.jetty.server.AbstractConnector - Started SocketConnector@0.0.0.0:8983
Run Code Online (Sandbox Code Playgroud)

这个过程应该是一个后台进程,因为它正在导致部署挂起,并在不部署新应用程序的情况下超时.根据这篇SO帖子,在部署新的应用程序版本之后开始延迟工作需要一些工作.有什么建议?澄清:

跑过

java -jar start.jar
Run Code Online (Sandbox Code Playgroud)

命令作为EB的非阻塞后台进程?

Tui*_*noe 4

因此,答案最终确实需要使用部署后挂钩,如上所述。终止并重新启动 EB EC2 实例以及全新部署解决了该问题。

container_commands:
  01_install_solr:
    command: "cd /opt/python/current/app &&
    wget http://archive.apache.org/dist/lucene/solr/4.7.2/solr-4.7.2.tgz &&
    tar xzf solr-4.7.2.tgz &&
    cd solr-4.7.2/example/solr/collection1/ &&
    cp -r conf conf.original &&
    ln -s /opt/python/current/app/deploy/solr conf"
    leader_only: true
  02_rebuild_index:
    command: "python manage.py rebuild_index --noinput"
    leader_only: true
commands:
  create_post_dir:
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
    ignoreErrors: false

  files:
    "/opt/elasticbeanstalk/hooks/appdeploy/post/start_solr.sh":
      mode: "000755"
      owner: root
      group: root
      content: |
        #!/usr/bin/env bash
        nohup java -jar /opt/python/current/app/solr-4.7.2/example/start.jar queue:work --daemon >/dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)