OpsWorks / Chef PHP部署过程

时间:2014-04-11 11:26:42

标签: php deployment aws-opsworks

我对使用OpsWorks可靠地部署简单的PHP应用程序感到非常沮丧,我无法找到有关如何管理srv/www/app-name/releases目录的任何文档,但我认为可能是我当前问题的原因。

我正在部署Laravel应用程序,所以我需要在部署时使用厨师食谱做两件事:composer install,以及一些可写的目录。 Composer似乎确实安装得很好,但是我的创建配方& chmod目录似乎发生在之前的版本中 - 这对我来说毫无意义。

安装composer:

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目录中创建的,就像&#39;电流&#39;符号链接已在此配方的持续时间内恢复。它们也是使用权限&#39; 411&#39;。

创建的

任何人都可以解释我在哪里出错吗? 我是否可以访问新的目录路径,而不是使用&#39; current&#39;符号链接?

1 个答案:

答案 0 :(得分:0)

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

你应该做的事情是:

  1. 使用&#34;#{release_path}&#34;您的食谱中的变量,用于在您的应用中生成特定于构建的文件/事件。
  2. 使用deploy / before_restart.rb文件执行一些符号链接,这些符号链接在可预测的位置提供文件
  3. 如果您提供正在调用的食谱的屏幕截图以及图层编辑视图中的哪个图层,它将帮助此处的人查看正在发生的事情并为您提供更好的反馈。