2011-01-10 6 views
8

毎回で展開するときに、私はカピストラーノは、新しいディレクトリを作成し、その中にヘッドリビジョンをチェックアウトするので、私はいくつかのバージョン管理外のファイルを失ったリモートサーバでキャップデプロイを実行してバージョン管理外のファイルを保管してください。しかし、ユーザーのアバター(ペーパークリップ)のようにバージョンアップされていないファイルや、新しい現在のリリースにコピーされないアップロードされたイメージがあります。カピストラーノ

どうすればこの問題を回避できますか?

ありがとうございます!

答えて

14

個人的には、こうした種類のものを処理する最善の方法は、共有フォルダにそれらを保存し、共有アセットへのシンボリックリンクを作成するためにcapistranoでタスクを作成することです。

ここでは私のプロジェクトの一つの例です:も動作し、実際にあなたのdeploy.rb内だけでワンライナーですshared_childrenためにあなたのパスを追加

set :shared_assets, %w{public/images/products public/images/barcodes} 

namespace :assets do 
    namespace :symlinks do 
    desc "Setup application symlinks for shared assets" 
    task :setup, :roles => [:app, :web] do 
     shared_assets.each { |link| run "mkdir -p #{shared_path}/#{link}" } 
    end 

    desc "Link assets for current deploy to the shared location" 
    task :update, :roles => [:app, :web] do 
     shared_assets.each { |link| run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}" } 
    end 
    end 
end 

before "deploy:setup" do 
    assets.symlinks.setup 
end 

before "deploy:symlink" do 
    assets.symlinks.update 
end 
+0

私は理解していますが...共有されたディレクトリはカピストラノのものですが、Railsはそれについて私が知る限り知りません。では、アプリケーションの外にあるディレクトリにファイルを保存するようにレールに指示する方法と、ローカルコピーにイベントが存在しない場合はどうすればよいですか? – emzero

+0

Railsでは何も変更しません。それがこの戦術のポイントです。 Railsはまだ画像を "RAILS_ROOT/public/images/avatars"などに保存しますが、そのフォルダは実際にはカプリストラノの "共有"フォルダ内のフォルダへの[symlink](http://en.wikipedia.org/wiki/Symbolic_link)フォルダ。 – idlefingers

+1

ああ、そうだね...私はそれを見なかった。ありがとう! =) – emzero

8

set :shared_children, shared_children + %w{public/uploads} 

はそれを見つけましたここに:astonj

0

これは非常に小さく有用な宝石です:https://github.com/teohm/capistrano-shared_fileです。宝石のドキュメントをチェックしてください - すべてが簡単です。 deploy.rb

宝石をインストールするには、それを必要とし、ちょうどあなたがshared_filesオプションでリリース間で共有したいファイルの配列を提供します。

set :shared_files, %w(config/database.yml) 

<project_dir>/shared/files/YOUR_FILE_GOES_HEREであなたのファイルを保存します。そして、各展開時にアプリケーションのルートにシンボリックリンクされます。それで全部です。

関連する問題