Chef infra 如何在使用应用程序cookbook时运行安装活动?
我正在尝试使用应用程序\u ruby cookbook部署我的Rails应用程序。我需要运行一些一次性的设置活动(比如使用Chef infra 如何在使用应用程序cookbook时运行安装活动?,chef-infra,chef-recipe,cookbook,Chef Infra,Chef Recipe,Cookbook,我正在尝试使用应用程序\u ruby cookbook部署我的Rails应用程序。我需要运行一些一次性的设置活动(比如使用rakedb:seed对数据库进行种子设定)。这些不应在后续厨师运行期间进行。定义这些任务的正确方法是什么 尝试使用gem。这种方式可以运行许多rake任务(您可以说是哪些任务),比如迁移,这意味着不需要执行两次。然后,您必须记住,如果您想要更改以前由这个rake任务之一执行的某些内容,您必须创建一个新的任务(如迁移) 出于种子目的,您可以尝试使用。使用约束 技术。我相信,这
rakedb:seed
对数据库进行种子设定)。这些不应在后续厨师运行期间进行。定义这些任务的正确方法是什么
我解决这个问题的方法是使用如下条件执行:
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
这可以确保设置步骤只发生一次。感谢您提供的提示!我不想触碰应用程序本身,而是将逻辑转移到部署配方上。当你的种子需要新记录时,你该怎么做。例如:新管理员用户、国家/地区等?。转到删除#{node[:deploy_path]}/db.seeded文件并再次启动chef cook?这样就不再是一次性的安装活动。在某种程度上,这可能与迁移有关,IMO。我关心的是更多的步骤需要进行一次,而且只能进行一次。