我知道,你可以为每个部署的一部分运行的任务,但我只想要一次引导数据库。
Answer 1:
克里斯蒂安的答案是接近的,但你也应该补充:
container_commands:
seeddb:
command: 'export HOME=/root; rake db:seed'
leader_only: true
从而使DB只从1个EC2实例种子,而不是所有的人都在同一时间。 根据您的EB部署/版, export HOME
可能会或可能不会需要。
Answer 2:
我曾经在这个地址提供的信息来创建一个脚本,将运行迁移后每个部署后: http://www.emind.co/how-to/how-to-run-rake-dbseed-in-amazon-弹性魔豆
我更喜欢这种方法,这样我就可以跟踪对EC2实例的文件。 当我最初部署这个在我的旧服务器(这是运行Linux <1.0.9),我没有问题。 不过,我最近有升级服务器的机器到64位Linux的亚马逊2014.03 v1.0.9运行的Ruby 2.0(彪马)和脚本开始失败。 如果您使用的是不同的Linux版本也很可能会失败。
这里的关键是/ usr / local / bin目录/你的rake命令使用正确的耙子。 我把这个直接从上的/ opt / elasticbeanstalk /钩/ appdeploy /前/中发现的其它脚本:
#.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
应当指出的是,该脚本仍然不正确的,因为我,如果你打算运行任何rake命令(这是目前在AWS上的其他脚本功能请求)时没有运行“捆绑高管耙”,这是非常建议。 如果你想拥有所有脚本运行“回扣”前束EXEC看看这里张贴的.config文件: https://github.com/alienfast/elastic-beanstalk
如果这还不为你工作,我建议ssh方式连接到运行你的应用程序,或部署一个新的运行相同的Linux / Ruby的版本,并定位到“/选择/ elasticbeanstalk /钩/ appdeploy您的EC2实例之一/前/”,看看有什么其他的脚本都在做。
我希望别人有所帮助!
Answer 3:
做你青苗弹性实例的命令,你可以设置自定义命令配置当你更新你的应用程序,将获得运行。 ( 事实上,有专门为不同类型的容器的命令,你可以做一个整体的文档页面 )。
- 如果你不已经有一个
.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(S):
git aws.push
要验证您的命令居然跑,进入你的弹性青苗控制台,并展开详细为您的环境,并导航到logs
选项卡,并刷新您的日志,并查看它们。 里面就有,只需做一个ctrl + f
为“种子”,直到你看到你的种子命令运行。 如果你没有看到它在那里的某个地方,那么它没有运行。
Answer 4:
我发现的唯一方法是ssh到EC2实例并运行“耙分贝:种子RAILS_ENV =生产的”手动从在/ var /应用/电流。
Answer 5:
这是一段时间,因为这个问题是问,所以也许你已经想通了。 无论如何,你可以在.beanstalk文件夹中添加名为(例如)文件seed.config。 进入这样的事情,你的种子将被运行:
container_commands:
01seed:
command: rake db:seed