14

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

4

5 回答 5

12

克里斯蒂安的答案很接近,但您还应该补充:

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

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

于 2013-05-31T18:08:02.747 回答
6

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

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

这里的关键是您的 rake 命令的/usr/local/bin/以使用正确的 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

如果这仍然对您不起作用,我建议您使用 ssh 连接到正在运行您的应用程序的 EC2 实例之一,或者部署一个运行相同 Linux/Ruby 版本的新实例并导航到“/opt/elasticbeanstalk/hooks/appdeploy /pre/" 以查看其他脚本在做什么。

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

于 2014-11-18T16:23:09.787 回答
4

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

  1. .ebextensions如果您的应用程序的根目录中还没有目录,请创建一个。
  2. 您在此处输入的任何文件都将运行。只要它以“ .config”结尾就可以随意命名 - 我随意命名我的seed.config
  3. 借用hfogel写的东西,你可以像这样在里面放一些东西:

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

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

要验证您的命令是否实际运行,请进入弹性 beanstalk 控制台并展开您的环境的详细信息,然后导航到logs选项卡,然后刷新日志并查看它们。在那里,只需执行一个ctrl + ffor "seed",直到您看到您的种子命令已运行。如果你没有在某个地方看到它,那么它就没有运行。

于 2013-05-11T19:32:27.437 回答
0

我发现的唯一方法是通过 ssh 进入 ec2 实例并从 /var/app/current 手动运行“rake db:seed RAILS_ENV=production”。

于 2013-02-21T01:38:21.000 回答
0

这个问题被问到已经有一段时间了,所以也许你已经弄清楚了。无论如何,您可以在 .beanstalk 文件夹中添加一个名为(例如)seed.config 的文件。输入类似这样的内容,您的种子将运行:

container_commands:
  01seed:
    command: rake db:seed
于 2013-04-30T15:02:27.993 回答