【问题标题】:Symfony2 + CapifonySymfony2 + Capifony
【发布时间】:2013-03-13 10:39:14
【问题描述】:

我正在尝试配置 Capifony 以部署到我的远程服务器。我想知道我的uploads 目录是否应该在.gitignore 中?运行 cap development depoy 时出现符号链接错误:

executing "ln -nfs /var/www/dev.xyz.co.uk/shared/web/uploads /var/www/dev.xyz.co.uk/releases/20130313103147/web/uploads"

*** [err :: x.xx.xx.xxx] ln:
*** [err :: x.xx.xx.xxx] failed to create symbolic link `/var/www/dev.xyz.co.uk/releases/20130313103147/web/uploads'
*** [err :: x.xx.xx.xxx] : No such file or directory
*** [err :: x.xx.xx.xxx] 

这是因为/web/uploads 在 .gitignore 中,所以它永远不会从 git 中拉出以进行符号链接吗?

我需要先在远程服务器上克隆我的存储库还是 Capifony 为我这样做?

在下面部署.rb:

set :stage_dir, 'app/config/deploy' # needed for Symfony2 only
set :stages, %w(production staging development)
require 'capistrano/ext/multistage'

set :application, "xyz.co.uk"
set :user, "root"  # The server's user for deploys

set :scm,         :git
set :repository, "git@github.com:test/#{application}.git"
set :keep_releases,  3
set :use_sudo,       false
set :shared_files,      ["app/config/parameters.yml"]
set :shared_children,   [app_path + "/logs", web_path + "/uploads", "vendor"]
set :use_composer, true
set :update_vendors, true
set :dump_assetic_assets, true
set :deploy_via, :copy

logger.level = Logger::MAX_LEVEL

development.rb 如下:

server 'x.xx.xx.xxx', :app, :web, :primary => true
ssh_options[:port] = xxxx
ssh_options[:forward_agent] = true
set :deploy_to, "/var/www/xyz.co.uk/"
set :symfony_env_prod, "dev"

【问题讨论】:

    标签: symfony deployment capistrano symlink capifony


    【解决方案1】:

    有几种方法可以实现这一点。

    将空文件夹提交到 git:

    使用以下内容创建文件 /web/uploads/.gitignore:

    !.gitignore
    

    这将允许将目录提交到存储库,但所有内容都将被忽略。它将在每次部署时创建一个空的上传文件夹。

    将上传内容创建为所有部署的共享文件夹

    此方法的优点是在部署之间保留您的上传 - 可能是您想要的。

    在您的 deploy.rb 中创建一个“firstdeploy”任务,该任务仅在初始部署时执行,并在此阶段创建目录:

    run "mkdir -p #{shared_path}/web/uploads"
    

    在您的部署配置中将其配置为像这样的共享路径

    set :web_path,   "web"
    set :shared_children, [web_path + "/uploads"]
    

    如果有帮助,我发布了我的部署脚本 here

    【讨论】:

    • 感谢您的 cmets。我已经在 /var/www/dev.xyz.co.uk/shared/web/uploads 手动创建了上传目录,所以我认为我不需要创建 firstdeploytask。出于某种原因,虽然它不会创建符号链接?!
    • 我还更新了我最初的问题以显示我的 deploy.rb 和 development.rb 脚本。在开发服务器上,我通常使用特定的 SSH 密钥来 git pull 那里没有使用 Capifony 的其他站点。这与我的本地计算机的 github 电子邮件和密码不同。
    • @gezpage:我遇到了同样的问题 (failed to create symbolic link /home/ubuntu/myapp/releases/20130323155737/web/uploads)。我已按照您的建议从项目级 .gitgnore 文件中删除 /web/uploads,并在 web/uploads 中添加了 .gitignore 文件。还是同样的错误。您能否分享您的项目 .gitgnore 文件的内容?还有其他想法吗?
    【解决方案2】:

    我认为您可以像 /config/parameters.yml 一样忽略它

    但是您应该在共享文件夹中手动创建上传文件夹吗?

    【讨论】:

    • 是 /var/www/dev.xyz.co.uk/shared/web/uploads/ 存在于服务器上。 - drwxr-xr-x 2 root root 4096 Mar 12 14:21 uploads
    • 服务器上还有什么需要设置的吗?我需要在服务器上初始化 GIT 吗?我已将本地 SSH 密钥复制到开发服务器。
    • 如果我将 web_path + "/uploads" 从 deploy.rb 中取出,那么 /config/parameters.yml 会出现错误 - failed to create symbolic link /var/www/dev.xyz.co.uk /releases/20130313113859/app/config/parameters.yml'`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多