首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地预编译资源的自定义rake任务rails 3.2.8

本地预编译资源的自定义rake任务rails 3.2.8
EN

Stack Overflow用户
提问于 2013-01-05 00:46:10
回答 2查看 776关注 0票数 0

我需要在本地机器上预编译资产,并在使用capistrano进行部署后使用预编译的资产进行部署。

我已经添加到development.rb

代码语言:javascript
复制
config.assets.prefix = "/dev-assets"

此外,我还添加了application.rb

代码语言:javascript
复制
config.assets.initialize_on_precompile = false

而不是手动执行rake assets:precompile,我想让这个过程从capistrano文件自动化,干净的资产,upload...etc。我已经尝试使用此自定义任务

代码语言: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 "bundle exec rake assets:precompile"
        run_locally "rsync -zvrh --progress -e 'ssh -i #{ssh_options[:keys][0]}' public/assets #{user}{server}:#{shared_path}"
        puts "cleaning up locally compiled assets"
        run_locally "bundle exec rake assets:clean"
      else
        puts "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end

但我得到一个错误:

代码语言:javascript
复制
/config/deploy.rb:73:in `block (3 levels) in load': undefined method `[]' for nil:NilClass (NoMethodError)

如何使用capistrano在本地和上传后预编译资源?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-05 01:52:43

问题已修复:

这是我的自定义任务运行良好:

代码语言: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_locally "rsync -vr --exclude='.DS_Store' public/assets #{user}@#{server.host}:#{shared_path}/"
        end
      else
        puts.info "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end
票数 2
EN

Stack Overflow用户

发布于 2013-01-05 00:51:42

看起来else块中的logger.info才是问题所在。

如果您出于其他原因需要Capistrano中的记录器,则可能需要手动对其进行初始化,因为您实际上并未在服务器中运行。但是,直接打印到控制台可能更容易(就像您处理上面的其他消息一样

替换

代码语言:javascript
复制
logger.info "Skipping ..."

使用

代码语言:javascript
复制
puts "Skipping ..."
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14161232

复制
相关文章

相似问题

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