Capistrano上的资产预编译错误部署为几次刷新

时间:2015-01-16 16:00:31

标签: ruby-on-rails ruby caching capistrano assets

现在有一个问题我一直在苦苦挣扎。

我一直在使用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权限被拒绝错误

enter image description here

所以我设法使用这段代码克服了这个错误

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:正如用户John指出的那样,我应该清除缓存,这确实解决了问题,但是在部署时仍会弹出此错误,直到它完成资产预编译并清除缓存。是否有任何我可以做的事情,以及#34;零停机时间部署"在这种情况下。

我已经像我这样修改了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'

1 个答案:

答案 0 :(得分:0)

您可能需要考虑使用更清洁的部署工具,例如mina。它是一个更简单的工具,由于它采用的方法,它更加可靠和快速。在我们的设置中,Capistrano造成的问题比解决的问题多得多。

将我们的多阶段部署迁移到mina只需要很少的努力,我们从未回头。我无法理解卡皮斯特拉诺3在荒野中度过了多少年来归结为运行远程剧本的原因。

Heres an article constrasting mina and capistrano