Ruby on rails 符号链接链接文件夹
我正在尝试将公用文件夹与我的rails应用程序符号链接到服务器上的公用html文件夹,但似乎无法正确执行 我的deploy.rb文件中有一个名为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
: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
,以简化操作。