我知道您可以将任务作为每次部署的一部分运行,但我只想引导数据库一次。
5 回答
克里斯蒂安的答案很接近,但您还应该补充:
container_commands:
seeddb:
command: 'export HOME=/root; rake db:seed'
leader_only: true
这样数据库只能从 1 个 EC2 实例中播种,而不是同时从所有这些实例中播种。根据您的 EB 部署/版本,export HOME
可能需要也可能不需要。
我使用此地址提供的信息创建了一个脚本,该脚本将在迁移后和每次部署后运行: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/" 以查看其他脚本在做什么。
我希望其他人觉得这很有用!
要在弹性 beanstalk 实例上执行命令,您可以设置自定义命令配置,这些配置将在您更新应用程序时运行。(事实上,有一个完整的文档页面专门介绍您可以执行的不同类型的容器命令)。
.ebextensions
如果您的应用程序的根目录中还没有目录,请创建一个。- 您在此处输入的任何文件都将运行。只要它以“
.config
”结尾就可以随意命名 - 我随意命名我的seed.config
借用hfogel写的东西,你可以像这样在里面放一些东西:
container_commands: 01seed: command: rake db:seed
将此新代码添加到您的存储库中:
git add .
然后git commit -m 'added seed config script'
git push
- 然后将此新代码推送到您的 aws eb 实例:
git aws.push
要验证您的命令是否实际运行,请进入弹性 beanstalk 控制台并展开您的环境的详细信息,然后导航到logs
选项卡,然后刷新日志并查看它们。在那里,只需执行一个ctrl + f
for "seed",直到您看到您的种子命令已运行。如果你没有在某个地方看到它,那么它就没有运行。
我发现的唯一方法是通过 ssh 进入 ec2 实例并从 /var/app/current 手动运行“rake db:seed RAILS_ENV=production”。
这个问题被问到已经有一段时间了,所以也许你已经弄清楚了。无论如何,您可以在 .beanstalk 文件夹中添加一个名为(例如)seed.config 的文件。输入类似这样的内容,您的种子将运行:
container_commands:
01seed:
command: rake db:seed