如何在AWS Elastic Beanstalk应用上调用db:seed



我知道您可以将任务作为每次部署的一部分运行,但我只想引导数据库一次。

Kristian的答案很接近,但你还应该加上:

container_commands:
  seeddb:
    command: 'export HOME=/root; rake db:seed'
    leader_only: true

这样DB只从一个EC2实例中播种,而不是同时从所有的EC2实例中播种。根据您的EB部署/版本,可能需要也可能不需要export HOME

我使用此地址提供的信息创建了一个脚本,该脚本将在迁移后和每次部署后运行:http://www.emind.co/how-to/how-to-run-rake-dbseed-in-amazon-elastic-beanstalk

我更喜欢这种方法,这样我就可以跟踪EC2实例上的文件。当我最初在我的旧服务器(运行Linux <1.0.9)上部署它时,我没有遇到任何问题。然而,我最近不得不将服务器机器升级到64位Amazon Linux 2014.03 v1.0.9,运行Ruby 2.0 (Puma),脚本开始失败。如果您使用不同的Linux版本,它可能会失败。

这里的关键是/usr/local/bin/到您的rake命令中以使用正确的rake。这是我直接从/opt/elasticbeanstalk/hooks/appdeploy/pre/:

找到的其他脚本中获取的。
#.ebextensions/db_seed.config
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/13_db_seed.sh":
    mode: "00755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      . /opt/elasticbeanstalk/containerfiles/envvars
      cd $EB_CONFIG_APP_ONDECK
      su -c "leader_only /usr/local/bin/rake db:seed" $EB_CONFIG_APP_USER ||
      echo "Rake task failed to run, skipping seeding."
      true

应该注意的是,这个脚本仍然是不正确的,因为我没有运行"bundle exec rake",如果你计划运行任何rake命令,这是强烈建议的(这是AWS上当前对其他脚本的功能请求)。如果您希望所有脚本在"rake"之前运行bundle exec,请查看这里发布的.config文件:https://github.com/alienfast/elastic-beanstalk

如果这仍然不适合你,我建议你的一个EC2实例运行你的应用程序,或部署一个新的运行相同的Linux/Ruby版本,并导航到"/opt/elasticbeanstalk/hooks/appdeploy/pre/",看看其他脚本在做什么。

我希望其他人觉得这有用!

在您的elastic beanstalk实例上执行命令,您可以设置自定义命令配置,这些配置将在更新应用程序时运行。(事实上,有一个完整的文档页面专门介绍您可以执行的不同类型的容器命令)。

  1. 如果你在应用程序的根目录下还没有.ebextensions目录,创建一个。
  2. 在这里输入的任何文件都将运行。命名为任何你想要的,只要它以".config"结尾——我随意命名为seed.config
  3. 借用hfogel写的东西,你可以在那里放一些像这样的东西:

    container_commands:
      01seed:
        command: rake db:seed
    
  4. 将此新代码添加到您的repo: git add .然后git commit -m 'added seed config script'然后git push

  5. 然后将此新代码推送到您的aws web实例:git aws.push

要验证您的命令是否实际运行,请进入您的elastic beanstalk控制台,展开您环境的详细信息,导航到logs选项卡,刷新日志并查看它们。在这里,只需对"seed"执行ctrl + f,直到看到seed命令运行为止。如果你没有看到它,那么它就没有运行。

我发现的唯一方法是ssh到ec2实例并手动从/var/app/current运行"rake db:seed RAILS_ENV=production"

这个问题已经问了一段时间了,所以也许你已经明白了。无论如何,您可以添加一个名为(例如)seed的文件。在.beanstalk文件夹中配置。输入这样的内容,你的种子将运行:

container_commands:
  01seed:
    command: rake db:seed

相关内容

  • 没有找到相关文章

最新更新