2014-04-11 30 views
1

我有一些严重的挫折让一个简单的PHP应用程序可靠地部署使用OpsWorks,我找不到任何文件如何管理srv/www/app-name/releases目录,但我认为这可能是原因我目前的问题。OpsWorks/Chef PHP部署过程

我正在部署Laravel应用程序,因此我需要在部署时使用厨师食谱发生两件事情:作曲家安装,以及一些可写入的目录。作曲家似乎安装得很好,但我的配方创建& chmod目录似乎发生在以前的版本 - 这对我来说根本毫无意义。

安装作曲:

node[:deploy].each do |application, deploy| 
    script "composer-install" do 
    interpreter "bash" 
    cwd "#{deploy[:deploy_to]}/current" 
    user "root" 
    code <<-EOH 
    composer install 
    EOH 
    end 
end 

这工作得很好,我可以刷新的供应商目录,因为这看到运行中出现的依赖关系。但接下来的配方运行:

node[:deploy].each do |application, deploy| 
    Chef::Log.info("Application path: #{deploy[:deploy_to]}"); 

    node['directories'].each do |path| 

     # Get the path we need 
     new_path = "#{deploy[:deploy_to]}/current/"+path 

     Chef::Log.info("Checking directory: "+new_path); 

     # Ensure the dir exists 
     unless File.exists?(new_path) 
      Chef::Log.info("Creating directory: "+new_path); 
      Dir.mkdir(new_path, 777) 
     end 

     # Ensure its writable 
     File.chmod(777, new_path) 

    end 
end 

Chef::log内容也出现在日志中,没有错误,但该目录是根本不存在的 - 他们在前面的release/timestamp目录中创建,仿佛“目前的'符号链接已经恢复到这个配方的持续时间。它们也是以'411'权限创建的。

任何人都可以解释我要去哪里错了吗? 我可以访问新的目录路径而不是使用'当前'符号链接吗?

回答

0

很可能发生的情况是您在部署的不同阶段应用了这两个指定的配方。由于您正在使用Current,因此在检查应用程序的下一部分时,它将处于旧目录的一个阶段。

什么,你应该做的,也许反而是:

  1. 使用“#{} release_path”变量在你的食谱来生成建立在你的应用程序特定的文件/事件。
  2. 使用发布/ before_restart.rb文件来执行一些符号链接提供的文件,在可预测的位置

如果您提供的是被称为并从该层编辑视图哪一层的食谱屏幕截图,它将帮助这里的人们看到正在发生的事情并为您提供更好的反馈。

+0

我无法在文档中找到对该变量的任何引用。你有任何你想分享的链接吗? – PachinSV

+0

@PachinSV:https://docs.chef.io/resource_deploy.html#callbacks –