1

我对使用 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确实出现在日志中,没有错误,但目录根本不存在 - 它们是在 PREVIOUSrelease/timestamp目录中创建的,就好像“当前”符号链接在本食谱期间已恢复。它们也是使用权限“411”创建的。

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

4

1 回答 1

0

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

你应该做的可能是:

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

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

于 2014-04-13T23:33:48.327 回答