0

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

4

2 回答 2

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

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

  3. 有些人将种子或数据放在迁移中(我不喜欢)。看看 这个问题/答案。我相信,这是与迁移最糟糕的合并种子不是一个好主意。随时间变化的种子意味着新的迁移,而随环境变化的种子几乎是不可能的。

于 2014-04-01T13:01:21.790 回答
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

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

于 2014-04-03T06:39:55.587 回答