Carrierwave files with Capistrano

后端 未结 5 979
轮回少年
轮回少年 2020-12-07 21:18

I\'m using rails 3.2 with asset and carrierwave for upload some images, they store in /public/uploads/photo/..... but when I do a cap:deploy (with capistrano) my current d

相关标签:
5条回答
  • 2020-12-07 21:32

    How about this:

    # config/deploy.rb
    set :shared_children, shared_children + %w{public/uploads}
    

    :shared_children defaults to %w(public/system log tmp/pids) so we're just expanding this list.

    EDIT:

    Don't forget to run cap deploy:setup after changing :shared_children so that the new targets are created under shared.

    EDIT Capistrano 3:

    Capistrano 3 uses the linked_dirs setting and doesn't specify public/system as a default anymore.

    set :linked_dirs, fetch(:linked_dirs) + %w{public/system public/uploads}

    0 讨论(0)
  • 2020-12-07 21:34

    Go to your app server shared folder and create an uploads directory.

    mkdir uploads

    In your deploy.rb file insert these codes under deploy namespace

    task :symlink_uploads do

    run "rm -rf #{latest_release}/public/uploads && ln -nfs #{shared_path}/uploads #{latest_release}/public/uploads"

    end

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

    Now delete the old files present already as they won't work. Upload a new file and cap deploy your app again. It should work now.

    0 讨论(0)
  • 2020-12-07 21:35

    With Capistrano 3 and without needing to redeploy.

    Like @tristanm mentioned add this to your config/deploy.rb

    # config/deploy.rb
    set :linked_dirs, fetch(:linked_dirs) + %w{public/uploads}
    

    To have capistrano create shared/public/uploads

    cap deploy:check:linked_dirs

    Now cap can create the symlink

    cap deploy:symlink:shared

    Finally, if you have backups of the uploads you can put them in shared/public/uploads/ and they should work without needing to redeploy.

    0 讨论(0)
  • 2020-12-07 21:42

    Capistrano creates new directory for every deploy.

    There are some exceptions to it. For example, the log files are shared between the deployment directories because they are just symlinks. You have to create a symlink for public/uploads as well.

    Here is the command:

    run <<-CMD
      rm -rf #{latest_release}/public/uploads &&
      ln -s #{shared_path}/uploads #{latest_release}/public/uploads
    CMD
    
    0 讨论(0)
  • 2020-12-07 21:42

    Using Capistrano 3, I just added this line to my config/deploy.rb

    set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
    

    Then, run:

    $ cap production deploy
    
    0 讨论(0)
提交回复
热议问题