2

Capistrano を使用して、Ruby on Rails と NodeJS アプリケーションをデプロイしています。アップロード フォルダーは、デプロイごとに削除されます。

これはいくつかの場所でポップアップしましたが、機能していないようです:

# 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:
    /node
    /rails

ありがとう!

4

4 に答える 4

3

この問題には別の解決策があります。uploadsディレクトリをカピストラーノに追加するshared_childrenと、すべての魔法が自動的に実行されます。この回答で詳細を確認できます: https://stackoverflow.com/a/9710542/835935

于 2012-05-16T21:47:18.487 に答える
2

既存の public/uploads フォルダーを必ず削除してください。に渡すと、ターゲットディレクトリの削除はカバー-fされlnません (または、少なくとも私にとっては移植可能に行っていません)。

私のシンボリックリンクディレクトリのタスクは通常次のようになります

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

明らかに、パブリック/アップロードのチェックインされたバージョンに必要なものがないことを確認してください!

于 2012-05-16T21:38:17.333 に答える
1

試しましたか

after 'deploy:update_code', ':symlink_uploads'

タスク:symlink_uploadsは名前空間にないので、上記を実行するか、名前空間に配置します

namespace :deploy do
  task :symlink_uploads do
    # ...
  end
end
于 2012-05-16T21:05:20.787 に答える
0

RoRアプリでアップロードされたファイルにも同様の問題があります。これは私のcapistranoタスクです:

...
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を使用しています。

于 2012-05-16T21:57:01.547 に答える