| 10 августа 2009, 21:54 | Переносим БД с PHP на Rails при помощи Rake |
|---|---|
Илья Зыкин (aka Зайко) Живет: Россия, Иваново Сообщений: 675 Рейтинг: 274.0 Рег: 27 окт. 2008 Его блог |
|
lib\tasks\import.rake namespace :db do namespace :import do # rake db:import:start desc 'import data form OldSite' task :start => :environment do # # # end# db:import:start end# db:import end#:db class OldSiteConnect < ActiveRecord::Base establish_connection( :adapter => "mysql", :host => "localhost", :username => "root", :password => "", :database => "OldSite", :encoding => "utf8" ) end class OldSiteSection < OldSiteConnect set_table_name "#{login}_sections" end class OldSitePage < OldSiteConnect set_table_name "#{login}_pages" end class OldSiteLinkedFiles < OldSiteConnect set_table_name "#{login}_linked_files" end set_table_name "#{login}_sections"namespace :db do namespace :import do # rake db:import:start desc 'import data form OldSite' task :start => :environment do class OldSiteConnect < ActiveRecord::Base establish_connection( :adapter => "mysql", :host => "localhost", :username => "root", :password => "", :database => "OldSite", :encoding => "utf8" ) end logins= %w{ town1 town2 town3 town4 town5 } logins.each do |login| user= User.find_by_login(login) eval(" class OldSiteSection < OldSiteConnect set_table_name '#{login}_sections' end class OldSitePage < OldSiteConnect set_table_name '#{login}_pages' end class OldSiteLinkedFiles < OldSiteConnect set_table_name '#{login}_linked_files' end ") sections= OldSiteSection.find(:all, :order=>"Prev_Id ASC") end# logins.each do |login| end# db:import:start end# db:import end#:db sections= OldSiteSection.find(:all, :order=>"Prev_Id ASC") namespace :db do namespace :import do # rake db:import:start desc 'import data form OldSite' task :start => :environment do class OldSiteConnect < ActiveRecord::Base establish_connection( :adapter => "mysql", :host => "localhost", :username => "root", :password => "", :database => "OldSite", :encoding => "utf8" ) end logins= %w{ town1 town2 town3 town4 town5 } logins.each do |login| user= User.find_by_login(login) eval(" class OldSiteSection < OldSiteConnect set_table_name '#{login}_sections' end class OldSitePage < OldSiteConnect set_table_name '#{login}_pages' end class OldSiteLinkedFiles < OldSiteConnect set_table_name '#{login}_linked_files' end ") # перебираем все разделы (фактически это дерево) sections= OldSiteSection.find(:all, :order=>"Prev_Id ASC") # Хеш для соответствия старого и нового id ids_set= Hash.new sections.each do |s| # Старый id страницы old_id= s.Page_Id # Старая страница basic_page= OldSitePage.find(old_id) title= basic_page.Description content= basic_page.Content page= Page.new( :user_id=>user.id, :title=>title, :content=>content ) page.save new_id= page.id # Если в спискt родителей имеется такой id, то страницу нужно переместить к родителю page.move_to_child_of(Page.find(ids_set[s.Prev_Id])) if ids_set[s.Prev_Id] # Добавить в список соответствий id ids_set[old_id] = new_id end# sections.each do |s| end# logins.each do |login| end# db:import:start end# db:import end#:db title= basic_page.Description.gsub(">", '>').gsub("<", '<').gsub(""", "'") content= basic_page.Content.gsub(">", '>').gsub("<", '<').gsub(""", "'") content= content.gsub("./files/common/", "/uploads/files/#{login}/") content= content.gsub("./files/pages/", "/uploads/files/#{login}/") content= content.gsub("./files/#{login}/common/", "/uploads/files/#{login}/") content= content.gsub("./files/#{login}/pages/", "/uploads/files/#{login}/") # Найти файлы если они прикреплены к странице files= OldSiteLinkedFiles.find(:all, :conditions => ['Page_Id = ? and Linked = ?', old_id, 1]) content= basic_page.Content.gsub(">", '>').gsub("<", '<').gsub(""", "'") # если массив найденных файлов не пуст то к содержимому страницы присоеденяю # HTML список со ссылками на файлы (content = content + file_div(files) ) unless files.empty? def file_div(files) res= "" files.each do |f| res<< content_tag(:li, link_to(f.Description, f.Path) ) end res= content_tag(:ul, res, :class=>:linked_files) end require 'action_view/helpers/tag_helper' require 'action_view/helpers/url_helper' class Helpers include ActionView::Helpers::TagHelper include ActionView::Helpers::UrlHelper end require 'action_view/helpers/tag_helper' require 'action_view/helpers/url_helper' class Helpers include ActionView::Helpers::TagHelper include ActionView::Helpers::UrlHelper end def file_div(files) help= Helpers.new res= "" files.each do |f| res<< help.content_tag(:li, help.link_to(f.Description, f.Path) ) end res= help.content_tag(:ul, res, :class=>:linked_files) end namespace :db do namespace :import do # rake db:import:start desc 'import data form OldSite' task :start => :environment do class OldSiteConnect < ActiveRecord::Base establish_connection( :adapter => "mysql", :host => "localhost", :username => "root", :password => "", :database => "OldSite", :encoding => "utf8" ) end require 'action_view/helpers/tag_helper' require 'action_view/helpers/url_helper' class Helpers include ActionView::Helpers::TagHelper include ActionView::Helpers::UrlHelper end def file_div(files) help= Helpers.new res= "" files.each do |f| res<< help.content_tag(:li, help.link_to(f.Description, f.Path) ) end res= help.content_tag(:ul, res, :class=>:linked_files) end logins= %w{ town1 town2 town3 town4 town5 } logins.each do |login| user= User.find_by_login(login) eval(" class OldSiteSection < OldSiteConnect set_table_name '#{login}_sections' end class OldSitePage < OldSiteConnect set_table_name '#{login}_pages' end class OldSiteLinkedFiles < OldSiteConnect set_table_name '#{login}_linked_files' end ") #OldSitePage.find:first sections= OldSiteSection.find(:all, :order=>"Prev_Id ASC") ids_set= Hash.new sections.each do |s| # Старый id страницы old_id= s.Page_Id # Старая страница basic_page= OldSitePage.find(old_id) # Найти файлы если они прикреплены к странице files= OldSiteLinkedFiles.find(:all, :conditions => ['Page_Id = ? and Linked = ?', old_id, 1]) title= basic_page.Description.gsub(">", '>').gsub("<", '<').gsub(""", "'") content= basic_page.Content.gsub(">", '>').gsub("<", '<').gsub(""", "'") # Добавим список прикрепленных файлов (content = content + file_div(files) ) unless files.empty? # Поправим все пути content= content.gsub("./files/common/", "/uploads/files/#{login}/") content= content.gsub("./files/pages/", "/uploads/files/#{login}/") content= content.gsub("./files/#{login}/common/", "/uploads/files/#{login}/") content= content.gsub("./files/#{login}/pages/", "/uploads/files/#{login}/") page= Page.new( :user_id=>user.id, :title=>title, :content=>content ) page.save new_id= page.id # Добавить в список соответствий id # Если в спискок родителей имеет такой id page.move_to_child_of(Page.find(ids_set[s.Prev_Id])) if ids_set[s.Prev_Id] ids_set[old_id] = new_id end# sections.each do |s| end# logins.each do |login| end# db:import:start end# db:import end#:db |
|
| https://github.com/the-teacher | Живу и работаю в Санкт-Петербурге | |
| php rails rake activerecord establish_connection |
| 11 августа 2009, 10:39 | RE: Переносим БД с PHP на Rails при помощи Rake |
|---|---|
xxx xxx Живет: Сообщений: 748 Рейтинг: 78.0 Рег: 22 апр. 2008 |
|
end# db:import:start
end# db:import
end#:db
task 'db:import:start' do end content= content.gsub("./files/common/", "/uploads/files/#{login}/") content= content.gsub("./files/pages/", "/uploads/files/#{login}/") content= content.gsub("./files/#{login}/common/", "/uploads/files/#{login}/") content= content.gsub("./files/#{login}/pages/", "/uploads/files/#{login}/")
[ ["./files/common/", "/uploads/files/#{login}/"],
["./files/pages/", "/uploads/files/#{login}/"],
["./files/#{login}/common/", "/uploads/files/#{login}/"],
["./files/#{login}/pages/", "/uploads/files/#{login}/"]
].each {|src, dest| src.gsub! dest }
def file_div(files)
help= Helpers.new
res= ""
files.each do |f|
res<< help.content_tag(:li, help.link_to(f.Description, f.Path) )
end
res= help.content_tag(:ul, res, :class=>:linked_files)
enddef help @help ||= Helpers.new end def file_div(files) content_tag(:ul, files.inject('') {|html, f| html << content_tag(:li, help.link_to(f.Description, f.Path)}, :class=>:linked_files end # Добавим список прикрепленных файлов (content = content + file_div(files) ) unless files.empty? !files.empty? && (content << file_div(files))
content += file_div(files) if !files.empty?
|
|
| 11 августа 2009, 12:09 | RE: RE: Переносим БД с PHP на Rails при помощи Rake |
|---|---|
Илья Зыкин (aka Зайко) Живет: Россия, Иваново Сообщений: 675 Рейтинг: 274.0 Рег: 27 окт. 2008 Его блог |
|
end# logins.each do |login|
end# db:import:start
end# db:import
end#:dbВобщем, то я тут даже надобности в неймспецсах не вижу. content += file_div(files) if !files.empty?!files.empty? && (content << file_div(files)) [ ["./files/common/", "/uploads/files/#{login}/"], ["./files/pages/", "/uploads/files/#{login}/"], ["./files/#{login}/common/", "/uploads/files/#{login}/"], ["./files/#{login}/pages/", "/uploads/files/#{login}/"] ].each {|src, dest| src.gsub! dest } P.S. Думаю, что если эту лабуду завернуть в клас например SuperMigrator, то туда хелперы можно просто влючить и не заморачиваться на инстанциирование переменных. |
|
| https://github.com/the-teacher | Живу и работаю в Санкт-Петербурге | |