DB Migration

% rake upgrade_instiki

fixes some potential problems in the database column types.

Revision content can now be up to 16MB.
Under MySQL, the previous limit was 64KB.

Page names can now be up to 255 bytes.
Under MySQL, the previous limit was 60 bytes.

Additional CSS styles can now be up to 64KB.
Under MySQL, the previous limit was 255 bytes.

Thanks to Andrew Stacey for reporting these.
master
Jacques Distler 2009-10-21 00:42:48 -05:00
parent 5df1504255
commit 97a35e280b
3 changed files with 41 additions and 13 deletions

View File

@ -0,0 +1,11 @@
class ModifyTextTypes < ActiveRecord::Migration
def self.up
change_column :revisions, :content, :text, :limit => 16777215
change_column :pages, :name, :string, :limit => 255
change_column :webs, :additional_style, :text
end
def self.down
raise ActiveRecord::IrreversibleMigration
end
end

Binary file not shown.

View File

@ -1,17 +1,34 @@
task :upgrade_instiki => :environment do
RAILS_ENV = 'production' unless ENV['RAILS_ENV']
puts "Upgrading Instiki in #{RAILS_ENV} environment."
require 'rake'
Web.all.each do |web|
public_path = Rails.root.join("public", web.address)
if public_path.exist?
webs_path = Rails.root.join("webs", web.address)
if webs_path.exist?
puts "Warning! The directory #{webs_path} already exists. Skipping."
else
public_path.rename(webs_path)
puts "Moved #{public_path} to #{webs_path}"
desc "This task will perform necessary upgrades to your Instiki installation"
task :upgrade_instiki => :environment do
ENV['RAILS_ENV'] ||= 'production'
puts "Upgrading Instiki in #{ENV['RAILS_ENV']} environment."
InstikiUpgrade.migrate_db
InstikiUpgrade.move_uploaded_files
end
class InstikiUpgrade
def self.migrate_db
ActiveRecord::Base.establish_connection ENV['RAILS_ENV']
Rake::Task["db:migrate"].invoke
end
def self.move_uploaded_files
Web.all.each do |web|
public_path = Rails.root.join("public", web.address)
if public_path.exist?
webs_path = Rails.root.join("webs", web.address)
if webs_path.exist?
puts "Warning! The directory #{webs_path} already exists. Skipping."
else
public_path.rename(webs_path)
puts "Moved #{public_path} to #{webs_path}"
end
end
end
end
end
end