2010-01-04 32 views
2

隨着Capistrano的,我部署從Mac OS X 10.5 Rails應用程序的CentOS 5.2Capistrano的看跌期權()和上傳()都遇事

注意deploy.rb和服務器環境都沒有超過一年的變化。

有我們deploy.rb文件中的一個任務叫做upload

put(File.read(file),"#{shared_path}/#{filename}", :via => :scp) 

這每一次失敗,出現以下異常:

No such file or directory - /srv/ourapp/releases/20100104194410/config/database.yml 

我的配置/數據庫的本地副本。 yml無法正確上傳。我已驗證它不是我們的互聯網連接,因爲這發生在三個不同的連接和兩個不同的系統上。

我也嘗試換出put()上傳(),但得到相同的結果;另外,刪除:via =>:scp,和/或試圖強制:sftp代替同樣失敗。

相關信息:

$帽-V Capistrano的v2.5.10

$紅寶石-v 紅寶石1.8.7(2008-08-11 PATCHLEVEL 72)[i686的-darwin9.6.0]

+0

可不可以給的「上傳」的任務多一些方面?它只上傳database.yml文件還是上傳其他文件?其他文件是否正確上傳?另外,你是否能夠從Capistrano的錯誤信息中包含更多信息?儘可能多的輸出將會有所幫助。 – Emily 2010-01-04 20:02:06

+0

這只是database.yml文件。這是完整的錯誤信息... 該文件成功上傳到src路徑: '$ cat /srv/app/shared/database.yml | wc -l - > 99' 我也可以驗證dest路徑存在。 – Kyle 2010-01-04 20:30:26

+0

錯誤來自哪裏?它是從Rails應用程序本身獲得的東西,還是在Capistrano部署期間獲得的東西?我假定它是在部署過程中,但是這沒有意義,現在我更多地考慮它了,因爲'put'命令放入共享目錄,並且找不到文件錯誤位於release目錄中。 – Emily 2010-01-04 21:01:01

回答

4

如果我正確理解你的問題,聽起來像Capistrano成功上傳文件,但Rails無法啓動,因爲它找不到deploy.yml文件。這可能會在Capistrano部署期間發生,作爲deploy:restart任務的一部分,使其看起來像Capistrano錯誤。

根據您給Capistrano上傳文件的信息/svr/ourapp/shared/和Rails幾乎肯定會在/svr/ourapp/releases/20100104194410/config/中查找。

如果是這種情況,您需要做的是創建一個任務,將共享數據庫文件符號鏈接到期望的位置,然後添加一個鉤子,以便任務在finalize_update後運行。例如:

task :symlink_database do 
    run "ln -s #{shared_path}/database.yml #{latest_release}/config/database.yml" 
end 

after 'deploy:finalize_update', :symlink_database 
+0

謝謝艾米莉,我最終做到了。然而,一個新的問題已經出現 - capistrano現在在啓動服務器後立即刪除最新的版本目錄。非常令人沮喪。 – Kyle 2010-01-04 21:40:25

+1

最有可能的原因可能是'deploy:rollback'由於某種原因被觸發。這絕對是默認回滾任務的一部分。祝你好運! – Emily 2010-01-04 21:41:59

0

當您嘗試將文件複製到不存在的目標路徑時,會出現「No such file or directory」錯誤。據我所知,Capistrano的put和upload方法只是試圖傳輸文件,但是沒有制定所需的路徑。當您嘗試上傳此文件時,是否有可能已經創建了config /目錄,甚至是shared_pa​​th本身?

+0

嗨,路徑都存在於上傳時。這個deploy.rb在一年多的時間裏一直在使用,幾乎沒有變化。 – Kyle 2010-01-04 20:28:08

1

這純粹來自服務器端視圖,但您是否檢查過以確保您用於上載的用戶具有該目錄的適當權限?

根據您的服務器環境對用戶(或組)進行遞歸更改應解決此問題。

chown -R user_name_here /srv/ourapp/releases/ 
chgrp -R group_name_here /srv/ourapp/releases/ 

您可能還想清理任何代碼存儲庫,例如git gcsvn cleanup。以及更新任何符號鏈接。

4
namespace :deploy do 
    task :upload_settings, :roles => :app do 
    run "mkdir -p #{shared_path}/config/" 
    top.upload "config/database.yml", "#{shared_path}/config/database.yml", :via => :scp 
    end 

    task :symlink_yml, :roles => :app do 
    run "ln -sf #{shared_path}/config/database.yml #{release_path}/config/database.yml" 
    end 
end 

after 'deploy:setup', 'deploy:upload_settings' 
after 'deploy:update_code', 'deploy:symlink_yml' 
相關問題