OpsWorks / Chef PHP 部署流程

Posted

技术标签:

【中文标题】OpsWorks / Chef PHP 部署流程【英文标题】:OpsWorks / Chef PHP deploy process 【发布时间】:2014-05-25 12:49:15 【问题描述】:

在使用 OpsWorks 可靠地部署一个简单的 php 应用程序时,我感到非常沮丧,我找不到任何关于如何管理 srv/www/app-name/releases 目录的文档,但我认为这可能是我当前问题的原因.

我正在部署一个 Laravel 应用程序,所以我需要在部署时使用厨师食谱发生两件事:composer install,以及一些可写的目录。 Composer 似乎安装得很好,但我创建和 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 的内容确实出现在日志中,没有错误,但目录根本不存在 - 它们是在 PREVIOUS release/timestamp 目录中创建的,好像“当前”符号链接已恢复为这个食谱的持续时间。它们也是使用权限“411”创建的。

谁能解释我在哪里出错了? 我可以访问新目录路径而不是使用“当前”符号链接吗?

【问题讨论】:

【参考方案1】:

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

你应该做的也许是:

    使用配方中的“#release_path”变量在您的应用中生成构建特定文件/事件。 使用 deploy/before_restart.rb 文件执行一些符号链接,在可预测的位置提供文件

如果您提供正在调用的配方的屏幕截图以及图层编辑视图中的哪个图层,它将帮助这里的人们看到正在发生的事情并为您提供更好的反馈。

【讨论】:

我在文档中找不到对该变量的任何引用。你有什么想要分享的链接吗?

以上是关于OpsWorks / Chef PHP 部署流程的主要内容,如果未能解决你的问题,请参考以下文章

OpsWorks 部署错误 - Chef::Exceptions::ChildConvergeError

部署 OpsWorks 应用程序时出现 Chef::Exceptions::UnresolvableGitReference 错误

如何在 MacOS 中安装 chef 12 以部署到 AWS Opsworks?

使用 OpsWorks + Chef

Chef 失败了我的资产:Opsworks 上的预编译步骤

使用 Chef 12 从 AWS OpsWorks 中的堆栈设置获取自定义 JSON