Pliki Carrierwave z Capistrano

Używam rails 3.2 z asset i carrierwave do przesyłania niektórych obrazów, które przechowują w /public/uploads/photo/..... ale kiedy robię cap: deploy (z capistrano) moja bieżąca aplikacja katalogu nie zawiera plików, które przesłałem, ponieważ capistrano zrobić nową wersję ....

=== Update = = =

W końcu używam tego :

Inside :deploy namespace

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

I po:

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

= = = Re Update = = =

Rozwiązanie @ tristanm jest najlepsze sposób na rozwiązanie tego.

Author: eveevans, 2012-01-28

5 answers

A co powiesz na to:

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

:shared_children domyślnie %w(public/system log tmp/pids), więc rozszerzamy tę listę.

EDIT:

Nie zapomnij uruchomić cap deploy:setup po zmianie :shared_children tak, aby nowe cele zostały utworzone pod shared.

Edytuj Capistrano 3:

Capistrano 3 używa ustawienia linked_dirs i nie określa już public/system jako domyślnego.

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

 65
Author: tristanm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-02 21:37:45

Z Capistrano 3 i bez konieczności przestawiania.

Jak wspomniał @tristanm dodaj to do swojego config / deploy.rb

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

Aby capistrano stworzył shared / public / uploads

cap deploy:check:linked_dirs

Teraz cap może utworzyć dowiązanie symboliczne

cap deploy:symlink:shared

Wreszcie, jeśli masz kopie zapasowe przesłanych plików, możesz umieścić je w shared / public/uploads / i powinny działać bez potrzeby ponownego wprowadzania.

 5
Author: Jason R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-07 19:13:19

Capistrano tworzy nowy katalog dla każdego wdrożenia.

Są od tego wyjątki. Na przykład pliki dziennika są współdzielone między katalogami wdrażania, ponieważ są to tylko dowiązania symboliczne. Musisz również utworzyć dowiązanie symboliczne dla publicznych / przesłanych plików.

Oto polecenie:

run <<-CMD
  rm -rf #{latest_release}/public/uploads &&
  ln -s #{shared_path}/uploads #{latest_release}/public/uploads
CMD
 4
Author: Arun Kumar Arjunan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-28 07:38:28

Przejdź do folderu udostępnionego serwera aplikacji i utwórz katalog przesłanych plików.

Mkdir uploads

W swoim składzie.plik RB Wstaw te kody w przestrzeni nazw

Zadanie: symlink_uploads do

W tym celu wykonaj polecenie "rm-rf #{latest_release}/public/uploads && ln-NFS #{shared_path} / uploads #{latest_release} / public/uploads"

End

Po 'deploy:update_code', 'deploy: symlink_uploads'

Teraz usuń stare pliki obecne już jako to nie zadziała. Prześlij nowy plik i ponownie rozpocznij wdrażanie aplikacji. Powinno zadziałać.

 0
Author: sumitsv21,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-25 04:11:12

Używając Capistrano 3, właśnie dodałem tę linię do mojego config / deploy.rb

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

Następnie uruchom:

$ cap production deploy
 0
Author: Bruno Paulino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 13:24:13