首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在生产服务器上使用capistrano清理旧资产

在生产服务器上使用capistrano清理旧资产
EN

Stack Overflow用户
提问于 2013-01-15 14:39:22
回答 3查看 3.2K关注 0票数 1

我在本地和在用rsync上传这些资产之后,用deploy.rb:上的下一段代码预编译了我的资产

代码语言:javascript
复制
namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0
        run_locally("rm -rf public/assets/*") 
        run_locally "bundle exec rake assets:precompile"
        find_servers_for_task(current_task).each do |server|
         #clean server assets before upload local new assets
         run_locally "rsync -vr --exclude='.DS_Store' --recursive --times --rsh=ssh --compress --human-readable --progress public/assets #{user}@#{server.host}:#{shared_path}/"
        end
      else
        puts "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end

问题是,随着我所做的每个部署,文件夹#{shared_path}/assets都在快速增长。

在将本地新资产上载到rm -rf public/assets/* #clean server assets before upload local new assets之前,需要在生产服务器上运行代码

我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-15 16:23:45

当此文件夹非常大时,删除资产的修复程序是:

代码语言:javascript
复制
run %Q{cd #{shared_path} && rm -rf assets/* }

以前,如果您愿意的话,您已经设置了共享文件夹的路径:

代码语言:javascript
复制
set :shared_path, "path_to_your_shared_folder"

这个问题的最后代码如下:

代码语言:javascript
复制
namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0
        run_locally("rm -rf public/assets/*") 
        run_locally "bundle exec rake assets:precompile"
        find_servers_for_task(current_task).each do |server|
         run %Q{cd #{shared_path} && rm -rf assets/* }
         run_locally "rsync -vr --exclude='.DS_Store' --recursive --times --rsh=ssh --compress --human-readable --progress public/assets #{user}@#{server.host}:#{shared_path}/"
        end
      else
        puts "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end
票数 2
EN

Stack Overflow用户

发布于 2015-11-02 12:44:29

只需将此添加到config/deploy.rb

代码语言:javascript
复制
# Callbacks
namespace :deploy do
  before :compile_assets, :force_cleanup_assets do
    on release_roles(fetch(:assets_roles)) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, 'assets:clobber'
        end
      end
    end
  end
end
票数 4
EN

Stack Overflow用户

发布于 2013-01-15 14:54:24

您只需要创建一个任务并在:预编译任务之前运行它。

代码语言:javascript
复制
task :clean_assets do 
  ...
end

// tell capistrano when you want to run this task
before 'precompile', 'clean_assets
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14340076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档