Ruby on rails 符号链接链接文件夹

Ruby on rails 符号链接链接文件夹,ruby-on-rails,command-line,capistrano,Ruby On Rails,Command Line,Capistrano,我正在尝试将公用文件夹与我的rails应用程序符号链接到服务器上的公用html文件夹,但似乎无法正确执行 我的deploy.rb文件中有一个名为:link\u release\u to\u public: namespace :deploy do task :link_release_to_public do run "cd ~" run "rm -rf ~/public_html" run "ln -sf ~/#{current_path}/public ~/pu

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

我的deploy.rb文件中有一个名为
:link\u release\u to\u 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\u release\u to\u public
成功完成,但是,它没有将文件直接链接到~/public\u html文件夹中,而是创建“public\u html”文件夹,然后在~/public\u html中符号链接“public”,以便:
~/public\u html/public

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

试试这个:

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

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

问题似乎在于如何将命令放入任务中。我更改了任务,以便同时发出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\u html而工作正常。

您确定,通过ssh的同一个命令创建了您所期望的吗?是的。我已经把命令一个字母一个字母地复制到终端中,并确认它可以工作。在这种情况下,没有理由拒绝同一个命令在您的“deploy.rb”中工作。这就是为什么它如此令人沮丧的原因。为了确保这一点,我再次运行了cap
deploy:link\u release\u to\u public
。我复制了任务运行时列出的命令,并通过SSH将它们粘贴到终端中。它在服务器上工作,在capistrano上不工作。在这种情况下,你必须冷静和耐心。把大问题分成小块,然后采取小步骤。例如:尝试删除
deploy.rb
中的两个命令,如
run cd
rm-rf…
。我尝试将斜杠放在
…current/public/
的末尾。它不能通过Capistrano工作,但可以通过SSH工作。我遇到了同样的问题。我用
ln
命令做了一个实验,没有
-f
选项(如果已经有symlinked dir来取消链接)。你可以试试:
ln-s~/rails\u app/releases/current/public~/public\u html
。你在服务器上运行什么操作系统?CentOS。。。我不确定哪个版本可以。最简单的解决方案是跳过符号链接,并将web服务器指向
…current/public
,以简化操作。