2012-05-14 2 views
2

저는 Capistrano를 사용하여 Ruby on Rails와 NodeJS 응용 프로그램을 배포하고 있습니다. 업로드 할 때마다 폴더가 제거됩니다.Capistrano and Carrierwave

이 여러 곳에서 일어 났고 그러나 작동하지 않습니다

# Keep File Uploads 
    task :symlink_uploads do 
    run "ln -nfs #{shared_path}/rails/uploads #{release_path}/rails/public/uploads" 
    end 

    after 'deploy:update_code', 'deploy:symlink_uploads' 

의 repo :

repo: 
    /node 
    /rails 

감사합니다!

답변

2

확인 그래서 오히려 이상을하거나 네임 스페이스에 넣어

after 'deploy:update_code', ':symlink_uploads' 

귀하의 :symlink_uploads 작업이 네임 스페이스에없는 시도 않았는지 기존 공공/업로드를 제거 폴더에 -f ~ ln을 전달하면 대상 디렉토리가 제거되지 않습니다. (또는 최소한 나를 위해 이식 할 수 없었습니다)

My s ymlink 디렉토리 작업은 일반적으로 다음과 같이 보입니다.

task :symlink_uploads do 
    run "rm -rf #{release_path}/rails/public/uploads} && ln -nfs #{shared_path}/rails/uploads #{release_path}/rails/public/uploads" 
end 

분명히 확인 된 버전의 공개/업로드에는 아무것도 필요하지 않습니다.

+0

아니. 작동하지 않았다. 어쩌면 다른 물건을 추가해야합니까? 이것은 좋은 접근 방법 인 것 같습니다. – CamelCamelCamel

+0

은 사용 권한에 문제가있었습니다. -nFs를 사용하고 repo에서 업로드 폴더를 제거해야했습니다. 내가 할 수있는 현상금을 줄거야. – CamelCamelCamel

1

namespace :deploy do 
    task :symlink_uploads do 
    # ... 
    end 
end 
+0

코드는 배포 네임 스페이스 안에 있습니다. – CamelCamelCamel

+0

알았어, 미안해. 너무 쉬웠다 고 생각 했어. – Vapire

3

이 문제에 대한 또 다른 해결책이 있습니다. uploads dir을 카피스트라노의 shared_children에 추가하면 모든 마법이 자동으로 수행됩니다. 이 답변에 대한 자세한 내용은 https://stackoverflow.com/a/9710542/835935

+0

나는 또한 이것을 시도했다. 레일이 레포의 뿌리에 있다면 그것은 효과가있었습니다. 로그 및 시스템이 이것을 사용하며, 심볼릭 링크가 작동하지 않는다고 생각합니다. – CamelCamelCamel

0

RoR 앱과 함께 업로드 한 파일과 비슷한 문제가 있습니다.

... 
task :link_public_folder, :roles => [:app, :web] do 
    run "mv -u #{release_path}/public/* #{shared_path}/public" 
    run "rm -rf #{release_path}/public" 
    run "ln -s #{shared_path}/publiC#{release_path}/public" 
    end 
    after "deploy:update", "deploy:link_public_folder" 

    task :setup_config, :roles => :app do 
    sudo "ln -nfs #{current_path}/config/apache.conf /etc/apache2/sites-available/#{application}" 
    run "mkdir -p #{shared_path}/config" 
    run "mkdir -p #{shared_path}/public" 
    put File.read("config/database.yml"), "#{shared_path}/config/database.yml" 
    puts "Now edit the config files in #{shared_path}." 
    end 
    after "deploy:setup", "deploy:setup_config" 
... 

어쩌면 당신에게

편집을 도와 : 이것은 내 카피 스트라 노 작업입니다 내가 너무 Carrierwave를 사용 .