Есть проблема, с которой я борюсь уже довольно давно.
Я развертываю с помощью Capistrano 3. В моем файле Capfile я использую
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rails'
require 'capistrano/bundler'
require 'sidekiq/capistrano'
require 'whenever/capistrano'
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
И всякий раз, когда я развертываю, он выдает мне ошибку отказа в разрешении EACCES
поэтому мне удалось преодолеть эту ошибку, используя этот фрагмент кода
desc 'Fixing up cache permissions'
task :fix_assets_permission do
on roles(:web), in: :sequence, wait: 5 do
puts "chown -R root:root #{shared_path.join('tmp/cache')};"
puts "chmod 666 -R #{shared_path.join('tmp/cache')};"
execute "chown -R root:root #{shared_path.join('tmp/cache')};"
execute "chmod 666 -R #{shared_path.join('tmp/cache')};"
end
end
и поместив его после предварительной компиляции активов, как это
after 'deploy:compile_assets', 'deploy:fix_assets_permission'
и он работал нормально, однако всякий раз, когда я развертываю первые несколько обновлений, он все равно выдает ту же ошибку, а затем работает нормально.
Как я могу исправить эту проблему, чтобы эта ошибка не появлялась каждый раз при развертывании проекта.
Любая помощь горячо приветствуется.
UPD: как указал пользователь Джон, я должен очистить кеш, и это действительно решает проблему, ОДНАКО эта ошибка все еще появляется во время развертывания, пока она не завершит предварительную компиляцию ресурсов и не очистит кеш. Могу ли я что-нибудь сделать, чтобы обеспечить «развертывание с нулевым временем простоя» в этом случае?
Я изменил свою задачу deploy.rb следующим образом
desc 'Clearing cache'
task :clear_cache do
on roles(:web), in: :sequence, wait: 5 do
within release_path do
execute :rake, 'tmp:clear'
end
end
end
after 'deploy:compile_assets', 'deploy:clear_cache'
rake tmp:clear
и посмотрите, исчезнет ли проблема. Вы используете Apache? - person johnsorrentino   schedule 19.01.2015