2012-12-29 181 views
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替換爲當前版本的公共文件夾的符號鏈接。但是,不是直接將文件鏈接到〜/ public_html文件夾,而是創建「public_html」文件夾,然後在〜/ public_html中的符號鏈接「public」,以便:~/public_html/public

如果我直接在服務器上執行完全相同的任務步驟(通過SSH),它可以很好地工作。我不明白我做錯了什麼。在...current/public/年底

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

注意斜線:

+0

你確定,通過ssh執行相同的命令會創建你所期望的嗎? –

+0

是的。我已經把這些命令逐字複製到終端並確認它能正常工作。 –

+0

在這種情況下,沒有理由拒絕在'deploy.rb'中使用相同的命令。 –

回答

1

看來問題在於如何將命令放入任務中。我改變,這樣的刪除和符號鏈接命令是在同一時間發出的,而不是單獨的任務:我跑的命令

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預期。

1

試試這個。它指示ln命令創建一個符號鏈接到該目錄,而不是創建一個新符號鏈接它。

+1

我試着把斜線放在'... current/public /'的末尾。它不能通過Capistrano工作,但它通過SSH工作。我遇到了同樣的問題。 –

+0

我使用'ln'命令做了一個沒有'-f'選項的實驗(這是爲了防止已經有符號鏈接的目錄解除鏈接)。你可以試試:'ln -s〜/ rails_app/releases/current/public〜/ public_html'。 –

+0

我試過這個,但它沒有工作......仍然是同樣的問題。 –