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

Posted

技术标签:

【中文标题】使用 Django 自动设置 Apache Solr - AWS Elastic Beanstalk 上的 Oscar【英文标题】:Automatically setup Apache Solr with Django - Oscar on AWS Elastic Beanstalk 【发布时间】:2016-03-11 15:09:42 【问题描述】:

我需要确保 Apache Solr 与我的 django-oscar 应用程序一起安装,并且一直使用这些带有 .ebextensions 配置文件的 instructions 来自动安装 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"

我需要在此处添加/更新什么才能让 solr 自动安装在

eb deploy

?

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

org.eclipse.jetty.server.AbstractConnector - Started SocketConnector@0.0.0.0:8983

这个进程实际上应该是一个后台进程,因为目前它导致部署挂起,并且在没有部署新应用程序的情况下超时。根据this SO post 的说法,在部署新应用程序版本后开始延迟作业需要一些工作。有什么建议?澄清一下:

运行

java -jar start.jar

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

【问题讨论】:

【参考方案1】:

所以答案最终是需要使用部署后挂钩,如前所述。终止并重新启动 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 &

【讨论】:

【参考方案2】:

请注意,这些步骤中的每一个都在默认文件夹中执行,因此发出cd 命令是无效的。您应该在一个命令而不是多个命令中运行所有这些步骤。 第 04 步将失败,因为它从默认目录而不是 solr 开始

【讨论】:

不,它们正在执行,在 04_archive 上失败:我认为执行目录与将包提取到的位置不同 好的,请用您收到的错误更新您的问题。我会更新我的答案。

以上是关于使用 Django 自动设置 Apache Solr - AWS Elastic Beanstalk 上的 Oscar的主要内容,如果未能解决你的问题,请参考以下文章

使用 mod_wsgi 在 apache 上设置 Django

Apache2 使用 Django 项目设置带有子域的虚拟主机

如何在 Apache 中使用 Django?

使用 Apache 和 mod_wsgi 在 Centos 上设置 Django

Django + mod_wsgi。从 Apache 的 SetEnv 设置操作系统环境变量

Django 虚拟主机设置。 Apache mod_wsgi