ruby on rails 把阿里云上的图片资源转移到七牛云上写的一个task 文件 自动转移

先写下关于转移时,配置文件的修改

1 Gemfile中增加

gem 'carrierwave-qiniu'
gem 'qiniu-rs'

2 增加文件 config文件下qiniu-rs.rb

Qiniu::RS.establish_connection! :access_key => 'key',
:secret_key => 'key'

3 avatar_upload.rb中

  storage :file 改为 storage :qiniu

4 carrierwave.rb文件中增加

config.storage = :qiniu
config.qiniu_access_key = "key"
config.qiniu_secret_key = "key"
config.qiniu_bucket = "  "
config.qiniu_bucket_domain = " "
config.qiniu_block_size = 4*1024*1024
config.qiniu_protocal = "http"

这样配置文件就改好了

参考 https://github.com/huobazi/carrierwave-qiniu

https://github.com/qiniu/ruby-sdk

 

接下来就是task 文件了 

require 'rake'

namespace :utils do

	desc "Deploy all picture in local to QiuNiuCloud"
	task :deploy_picture_to_qiniu => :environment do
		@coy = Company.all
		@tech = Technician.all
		@ve = Venue.all
		@sm = ServiceMenu.all
		@pic = Pic.all
		modified_by_shell
		upload_to_qiniu(@coy,1)
		upload_to_qiniu(@tech,1)
		upload_to_qiniu(@ve,1)
		upload_to_qiniu(@sm,1)
		upload_to_qiniu(@pic,2)
	end

	desc "update_gemfile"
	task :update_gemfile => :environment do
		url = Rails.root.to_s+"/Gemfile"
		context = "gem \"qiniu-rs\" \\n gem \"carrierwave-qiniu\"" #\\转义符号
		`sed -i '4 i #{context}' #{url}`  #ruby中用``执行shell脚本
	end
end

def upload_to_qiniu(ava,a)
	case a
	when 1
		if !ava.nil?
			ava.each do |t|
				if t.avatar.url.nil? 
					puts "avatar is nil"
				else
					puts t.avatar.current_path
					if FileTest::exist?(t.avatar.current_path)
						t.avatar = File.open(t.avatar.current_path)
						t.save!
						puts "upload is success to qiniu"
						puts "qiniu address #{t.avatar.url}"
					else
						puts "file is not exist"
					end
				end
			end
		end
	when 2
		if !ava.nil?
			ava.each do |t|
				if t.photo.url.nil? 
					puts "photo is nil"
				else
					puts t.photo.current_path
					if FileTest::exist?(t.photo.current_path)
						t.photo = File.open(t.photo.current_path)
						t.save!
						puts "upload is success to qiniu"
						puts "qiniu address #{t.photo.url}"
					else
						puts "file is exist"
					end
				end
			end
		end
	end
end

def modified_by_shell
	
	url = Rails.root.to_s+"/app/uploaders/avatar_uploader.rb"
	`sed -i 's/storage :file/storage :qiniu/g' #{url}`

	url = Rails.root.to_s+"/app/uploaders/photo_uploader.rb"
	`sed -i 's/storage :file/storage :qiniu/g' #{url}`

	url = Rails.root.to_s+"/config/initializers/carrierwave.rb"
	con = IO.read(url)
	if con.include?("qiniu")
		puts "carrierwave.rb already update"
	else
		context = "config.storage             = :qiniu\\nconfig.qiniu_access_key    = \"93vlzlK9UlO6UhZaVlrZ4RyVanIv5f1meAX_ofK2\"\\nconfig.qiniu_secret_key    = \"7UGe9arh_jrxTQGa1WLba3D8xDZ-FbXOJSVYAJt7\"\\nconfig.qiniu_bucket        = \"xiadan\"\\nconfig.qiniu_bucket_domain = \"xiaddan.qiniudn.com\"\\nconfig.qiniu_block_size    = 4*1024*1024\\nconfig.qiniu_protocal      = \"http\""
		`sed -i '12 i #{context}'  #{url}`
	end	
	

	url = Rails.root.to_s+"/config/qiniu-rs.rb"
	context = "Qiniu::RS.establish_connection! :access_key => '93vlzlK9UlO6UhZaVlrZ4RyVanIv5f1meAX_ofK2', \n :secret_key => '7UGe9arh_jrxTQGa1WLba3D8xDZ-FbXOJSVYAJt7'"
	if !FileTest::exist?(url)
		`touch #{url}`
		file = File.open("#{url}","w")
		file.puts context
		file.close
	else
		puts "qiniu-rs.rb file is exist"
	end
end

  

 

 

posted @ 2013-08-06 20:19  他好像条狗啊  阅读(1199)  评论(0编辑  收藏  举报