我正在尝试使用 application_ruby 食谱部署我的 Rails 应用程序。我需要运行一些一次性设置活动(例如使用 为数据库播种rake db:seed
)。这些不应该在随后的厨师运行期间完成。定义这些任务的正确方法是什么?
问问题
175 次
2 回答
1
尝试使用after_party gem。这种方式运行许多像迁移一样的 rake 任务(你说哪些),意味着不要执行两次。然后你必须记住,如果你想改变以前由这个 rake 任务之一执行的东西,你必须创建一个新的(比如迁移)
出于种子目的,您可以尝试使用seed_fu。使用约束技术。我相信这对种子来说是正确的,但有 seed_fu 语法。
有些人将种子或数据放在迁移中(我不喜欢)。看看 这个问题/答案。我相信,这是与迁移最糟糕的合并种子不是一个好主意。随时间变化的种子意味着新的迁移,而随环境变化的种子几乎是不可能的。
于 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 回答