0

我正在尝试将公用文件夹符号链接到我的 rails 应用程序到我服务器上的 public_html 文件夹,但我似乎无法正确处理。

我的 deploy.rb 文件中有一个任务,名为:link_release_to_public

namespace :deploy do 
  task :link_release_to_public do
    run "cd ~"
    run "rm -rf ~/public_html"
    run "ln -sf ~/#{current_path}/public ~/public_html"
  end
end

在其中,我删除了现有的“public_html”文件夹,然后使用以下命令创建符号链接:

ln -sf ~/rails_app/releases/current/public ~/public_html

目标是用指向当前版本的公共文件夹的符号链接替换 ​​~/public_html。

但是,运行cap deploy:link_release_to_public成功完成,而不是将文件直接链接到 ~/public_html 文件夹,而是创建“public_html”文件夹,然后在 ~/public_html 中符号链接“public”,以便:~/public_html/public.

如果我直接在服务器上(通过 SSH)在任务中执行完全相同的步骤,它会完美运行。我不明白我做错了什么。

4

2 回答 2

1

试试这个 :

ln -sf ~/rails_app/releases/current/public/ ~/public_html

注意末尾的斜线...current/public/。它指示ln命令对目录进行符号链接,而不是创建新目录并对其进行符号链接。

于 2012-12-29T01:12:55.480 回答
1

看来问题在于如何将命令放入任务中。我更改了任务,以便同时发出 remove 和 symlink 命令,而不是分别发出:

namespace :deploy do 
  task :link_release_to_public do
    run "cd ~"
    run "rm -rf ~/public_html && ln -sf ~/#{current_path}/public ~/public_html"
  end
end

我运行了该命令,并通过将符号链接放置为 ~/public_html 来按预期工作。

于 2012-12-29T03:05:24.313 回答