【问题标题】:Symlink Linking Folder符号链接链接文件夹
【发布时间】:2012-12-14 04:27:50
【问题描述】:

我正在尝试将公用文件夹符号链接到我的 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)在任务中执行完全相同的步骤,它会完美运行。我不明白我做错了什么。

【问题讨论】:

  • 你确定,通过 ssh 的相同命令会产生你所期望的吗?
  • 是的。我已将命令逐个字母复制到终端并确认它有效。
  • 在这种情况下,没有理由拒绝在您的 `deploy.rb' 中使用相同的命令。
  • 这就是它如此令人沮丧的原因。可以肯定的是,我再次运行 cap deploy:link_release_to_public。我复制了任务运行时列出的命令,并通过 SSH 将它们粘贴到终端中。它在服务器上工作,不能与 capistrano 一起工作。
  • 在这种情况下,您必须保持冷静和耐心。把大问题分解成小块,迈出小步。例如:尝试删除 deploy.rb 中的几个命令,例如 run cd ~rm -rf ...

标签: ruby-on-rails command-line capistrano


【解决方案1】:

试试这个:

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

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

【讨论】:

  • 我尝试将斜线放在...current/public/ 的末尾。它不能通过 Capistrano 工作,但可以通过 SSH 工作。我遇到了同样的问题。
  • 我用ln 命令做了一个实验,没有-f 选项(如果已经有符号链接的目录可以取消链接)。你可以试试:ln -s ~/rails_app/releases/current/public ~/public_html.
  • 你在服务器上运行什么操作系统?
  • CentOS...我不确定是哪个版本
  • 没关系。为简单起见,最简单的解决方案是跳过符号链接并将您的 Web 服务器指向 ...current/public
【解决方案2】:

看来问题在于如何将命令放入任务中。我更改了任务,以便同时发出 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,它按预期工作。

【讨论】:

    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2017-05-02
    相关资源
    最近更新 更多