我知道您可以在每次部署中运行任务,但我只想引导数据库一次。
答案 0 :(得分:12)
克里斯蒂安的答案很接近,但你还应该补充:
container_commands:
seeddb:
command: 'export HOME=/root; rake db:seed'
leader_only: true
因此,DB仅从1个EC2实例播种,而不是同时播放所有这些实例。根据您的EB部署/版本,export HOME
可能需要也可能不需要。
答案 1 :(得分:5)
我使用此地址提供的信息创建了一个脚本,该脚本将在迁移后和每次部署后运行:http://www.emind.co/how-to/how-to-run-rake-dbseed-in-amazon-elastic-beanstalk
我更喜欢这种方法,以便我可以跟踪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
应该注意的是,这个脚本仍然不正确,因为我没有运行"捆绑exec rake"如果您计划运行任何rake命令(这是AWS当前用于其他脚本的功能请求),这是非常值得建议的。如果你希望所有脚本在" rake"之前运行bundle exec。看一下这里发布的.config文件:https://github.com/alienfast/elastic-beanstalk
如果这仍然不适合您,我建议您使用正在运行您的应用的EC2实例之一,或者部署一个运行相同Linux / Ruby版本的新实例并导航到"的/ opt / elasticbeanstalk /钩/ appdeploy /前/"看看其他脚本在做什么。
我希望其他人觉得这很有用!
答案 2 :(得分:4)
要在弹性beanstalk实例上执行命令,您可以设置自定义命令配置,这些配置将在您更新应用程序时运行。 (In fact, there is a whole docs page dedicated to the different types of container commands you can do)。
.ebextensions
目录,请创建一个。.config
"结束,就可以任意命名。 - 我任意命名为seed.config
借用 hfogel 写的内容,你可以像这样放一些东西:
container_commands:
01seed:
command: rake db:seed
将此新代码添加到您的代表处:git add .
然后git commit -m 'added seed config script'
然后git push
git aws.push
要验证您的命令是否实际运行,请进入弹性beanstalk控制台并展开环境的详细信息,然后导航到logs
选项卡,刷新日志并查看它们。在那里,只需为{#1}}做种子"直到你看到种子命令运行。如果你不在某处看到它,那么它就没有了。
答案 3 :(得分:0)
我找到的唯一方法是ssh进入ec2实例并从/ var / app / current手动运行“rake db:seed RAILS_ENV = production”。
答案 4 :(得分:0)
问题问题已经有一段时间了,所以也许你已经弄明白了。无论如何,您可以在.beanstalk文件夹中添加一个名为(例如)seed.config的文件。输入这样的内容,你的种子就会运行:
container_commands:
01seed:
command: rake db:seed