【问题标题】:Asset precompile error on Capistrano deploy for a couple refreshesCapistrano 部署上的资产预编译错误,进行了几次刷新
【发布时间】:2015-03-15 06:59:04
【问题描述】:

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

我一直在使用 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: 正如用户 John 指出的那样,我应该清除缓存,这确实解决了问题但是在部署时仍然会弹出此错误,直到它完成资产预编译并清除缓存。在这种情况下,我能做些什么来实现“零停机部署”。

我已经像这样修改了我的 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 清除 tmp 文件夹,看看问题是否消失。你在使用 Apache 吗?
  • 嗨,约翰,感谢您抽出宝贵时间回复。 rake tmp:clear 确实解决了这个问题,但是在 Capistrano 的上下文中,在预编译资产时仍然有相当多的停机时间,只有在编译资产后,缓存被清除并且这个错误消失了。认为您对如何使其成为零停机部署有任何想法?我已经用更多信息更新了问题。
  • 哦,我正在使用Passenger
  • 对于缓存清除,您可能不需要在每次部署时都这样做。我只是建议它,因为您最近更改了项目的 tmp/cache 目录的权限,并且那里可能有坏文件。
  • Capistrano 没有任何开箱即用的功能可以实现零停机时间部署。这将需要一些配置。乘客企业版具有零停机能力,但我认为这不是免费的。如果你想推出自己的检查 benjaminknofe.com/blog/2014/03/08/…railscasts.com/episodes/…

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


【解决方案1】:

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

将我们的多阶段部署迁移到 mina 花费了很少的精力,而且我们从未回头。我无法想象 Capistrano 3 已经在荒野中完成了归结为运行远程脚本的工作。

这是an article constrasting mina and capistrano

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多