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.
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}
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.
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
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ć.
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
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