Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Capistrano部署上的资产预编译错误,需要进行几次刷新_Ruby On Rails_Ruby_Caching_Capistrano_Assets - Fatal编程技术网

Ruby on rails Capistrano部署上的资产预编译错误,需要进行几次刷新

Ruby on rails Capistrano部署上的资产预编译错误,需要进行几次刷新,ruby-on-rails,ruby,caching,capistrano,assets,Ruby On Rails,Ruby,Caching,Capistrano,Assets,有一个问题我已经挣扎了很长一段时间了 我一直在使用Capistrano3进行部署。 在我的Capfile中,我使用 require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/rails' require 'capistrano/bundler' require 'sidekiq/capistrano' require 'whenever/capistrano' Dir.glob('lib/capistr

有一个问题我已经挣扎了很长一段时间了

我一直在使用Capistrano3进行部署。 在我的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'
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'
它工作得很好,但是每当我部署时,前几次刷新仍然会抛出完全相同的错误,然后工作得很好

我怎样才能解决这个问题,使这个错误不会在每次部署项目时弹出

非常感谢您的帮助

UPD:正如用户John指出的,我应该清除缓存,这确实解决了这个问题,但是这个错误在部署时仍然会弹出,直到它完成资产预编译并清除缓存。在这种情况下,我可以做些什么来实现“零停机部署”

我修改了deploy.rb任务,如下所示

after 'deploy:compile_assets', 'deploy:fix_assets_permission'
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'

<>你可能想考虑使用一个更干净的部署工具,比如。它是一个简单得多的工具,由于它使用的方法,它更可靠、更快。在我们的设置中,Capistrano造成的问题比它解决的要多

将我们的多阶段部署迁移到mina只需要很少的努力,而且我们从未回头。我不知道Capistrano3在荒野中做了多少年,归根结底就是运行远程脚本


此处。

尝试用
rake tmp:clear
清除tmp文件夹,看看问题是否消失。你在使用Apache吗?嗨,John,谢谢你花时间回复。rake tmp:clear确实解决了这个问题,但在Capistrano的环境中,在预编译资产时仍有相当多的停机时间,只有在编译资产后,缓存被清除,此错误才会消失。你认为你对如何使它成为零停机部署有什么想法吗?我更新了问题的更多信息。哦,我正在使用Passenger清除缓存,您可能不需要在每次部署中都这样做。我之所以建议这样做,是因为您最近更改了项目的tmp/cache目录的权限,其中可能有错误的文件。没有任何现成的方法可以使用Capistrano进行零停机部署。这需要一些配置。乘客企业版具有零停机能力,但我认为这不是免费的。如果你想推出自己的退房和