如何在使用应用程序菜谱时运行安装活动?

时间:2014-04-01 08:56:13

标签: chef chef-recipe cookbook

我正在尝试使用application_ruby cookbook部署我的Rails应用程序。我需要运行一些一次性设置活动(比如使用rake db:seed播种数据库)。这些不应该在随后的厨师运行期间完成。什么是定义这些任务的正确方法?

2 个答案:

答案 0 :(得分:1)

  1. 尝试使用after_party gem。这样可以运行许多rake任务(你说哪些)像迁移一样,意味着不要执行两次。那么你必须记住,如果你想要改变之前由这个rake任务之一执行的东西你必须创建一个新的(如迁移)

  2. 出于种子目的,您可以尝试使用seed_fu 。使用约束 技术。我相信这是种子的正确,但有seed_fu语法。

  3. 有些人将种子或数据放入迁移(我不喜欢)。看着 this question/answer。我认为,这是与迁移最差的合并种子并不是一个好主意。种子随时间的变化意味着新的迁徙和种子因环境而变化几乎是不可能的。

答案 1 :(得分:0)

我解决这个问题的方法是使用这样的条件执行:

execute "seed database" do
  cwd node[:release_path]
  user node[:owner]
  environment ({'RAILS_ENV' => node[:environment]})
  command "bundle exec rake db:seed && touch #{node[:deploy_path]}/db.seeded"
  not_if { ::File.exists?("#{node[:deploy_path]}/db.seeded") }
end

这确保设置步骤仅发生一次。