Skip to content

Commit

Permalink
Using new mysql2 gem. Update to rails 3. Created a task to setup a te…
Browse files Browse the repository at this point in the history
…st domain. Update quick install to setup Gemfile
  • Loading branch information
Doug Youch committed Jul 31, 2011
1 parent c6ae689 commit 300b16c
Show file tree
Hide file tree
Showing 12 changed files with 129 additions and 34 deletions.
1 change: 1 addition & 0 deletions .rvmrc
@@ -0,0 +1 @@
rvm 1.9.2-p290@Webiva
2 changes: 1 addition & 1 deletion app/controllers/emarketing_controller.rb
Expand Up @@ -229,7 +229,7 @@ def charts
return render :json => data
elsif @format == 'csv'
report = StringIO.new
csv_data = FasterCSV.generate do |writter|
csv_data = CSV.generate do |writter|
writter << ['Title', 'Visitors', 'Hits', 'Subscribers', 'Leads', 'Conversions']
@stats.each do |stat|
writter << [stat.target.send(@title), stat.visits, stat.hits, stat.subscribers, stat.leads, stat.conversions]
Expand Down
2 changes: 1 addition & 1 deletion app/models/end_user.rb
Expand Up @@ -538,7 +538,7 @@ def update_end_user_values #:nodoc:
def self.fetch_user_level(end_user_id)
end_user_id = end_user_id.to_i
results = self.connection.execute "SELECT user_level FROM end_users WHERE id = #{self.connection.quote end_user_id}"
results.each_hash { |row| return row['user_level'].to_i }
results.each { |row| return row['user_level'].to_i }
nil
end

Expand Down
6 changes: 3 additions & 3 deletions config/Gemfile
@@ -1,10 +1,10 @@
# Edit this Gemfile to bundle your application's dependencies.
source 'http://rubygems.org'

gem "rails", '3.0.5'
gem "rails", '3.0.9'

gem 'mysql'
gem 'haml', '>= 3.0.25'
gem 'mysql2', "~> 0.2.0"
gem 'haml'
gem 'mime-types', :require => 'mime/types'
gem 'radius', '0.7.0.prerelease'
gem 'RedCloth', :require => 'redcloth'
Expand Down
6 changes: 3 additions & 3 deletions config/cms.yml.example
@@ -1,5 +1,5 @@
development:
adapter: mysql
adapter: mysql2
socket: /var/run/mysqld/mysqld.sock
database: webiva
username: webiva_user
Expand All @@ -12,7 +12,7 @@ development:
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
adapter: mysql
adapter: mysql2
socket: /var/run/mysqld/mysqld.sock
database: webiva_testing
username: webiva_user
Expand All @@ -22,7 +22,7 @@ test:
pool: 10

production:
adapter: mysql
adapter: mysql2
socket: /var/run/mysqld/mysqld.sock
database: webiva
username: webiva_user
Expand Down
6 changes: 3 additions & 3 deletions config/cms_migrator.yml.example
@@ -1,5 +1,5 @@
development:
adapter: mysql
adapter: mysql2
socket: /var/run/mysqld/mysqld.sock
database: webiva
username: webiva_migrator
Expand All @@ -11,7 +11,7 @@ development:
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
adapter: mysql
adapter: mysql2
socket: /var/run/mysqld/mysqld.sock
database: webiva_testing
username: webiva_user
Expand All @@ -20,7 +20,7 @@ test:
encoding: utf8

production:
adapter: mysql
adapter: mysql2
socket: /var/run/mysqld/mysqld.sock
database: webiva
username: webiva_migrator
Expand Down
Expand Up @@ -32,7 +32,7 @@ def self.up

# email campaign
result = self.connection.execute "show tables like 'market_campaign_queue_sessions'"
self.connection.execute 'UPDATE domain_log_sessions, market_campaign_queue_sessions SET domain_log_source_id = 2, `ignore` = 0 WHERE domain_log_sessions.session_id = market_campaign_queue_sessions.session_id AND domain_log_source_id IS NULL' if result.num_rows > 0
self.connection.execute 'UPDATE domain_log_sessions, market_campaign_queue_sessions SET domain_log_source_id = 2, `ignore` = 0 WHERE domain_log_sessions.session_id = market_campaign_queue_sessions.session_id AND domain_log_source_id IS NULL' if result.size > 0

# search
self.connection.execute 'UPDATE domain_log_sessions SET domain_log_source_id = 4, `ignore` = 0 WHERE `query` IS NOT NULL AND `query` != "" AND domain_log_source_id IS NULL'
Expand Down
3 changes: 2 additions & 1 deletion db/system_migrate/002_globalize_migration.rb
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
require 'csv'

class GlobalizeMigration < ActiveRecord::Migration
Expand Down Expand Up @@ -70,7 +71,7 @@ def self.load_from_csv(table_name, data)
is_header = false
cnx = ActiveRecord::Base.connection
ActiveRecord::Base.silence do
reader = CSV::Reader.create(data)
reader = CSV.new data

columns = reader.shift.map {|column_name| cnx.quote_column_name(column_name) }
column_clause = columns.join(', ')
Expand Down
91 changes: 91 additions & 0 deletions lib/tasks/initialize_test_domain.rake
@@ -0,0 +1,91 @@
namespace "cms" do
desc "Initialize a Test Domain Database"
task :initialize_test_domain => [:environment] do |t|
domain = ENV['DOMAIN'] || 'test.dev'

db_config_file = YAML.load_file("#{Rails.root}/config/cms_migrator.yml")
db_config = db_config_file[Rails.env]
db_adapter = db_config['adapter'] || 'mysql'
db_socket = db_config['socket']
db_encoding = db_config['encoding'] || 'utf8'
db_host = db_config['host'] || 'localhost'

ActiveRecord::Base.establish_connection(db_config)

dmn = Client.first.domains.create :name => domain
raise("Failed to create test domain: #{domain}") if dmn.new_record?

base_name = db_config_file['base_webiva_db'] || "webiva"
base_name += '_'
dmn.database = base_name + sprintf("%03d",dmn.id) + '_' + dmn.name.gsub(/[^a-zA-Z0-9]+/,"_")[0..20]
create_database = true

dmn.status = 'working'
dmn.save

base_name = db_config_file['base_webiva_db_user'] || "cms"
base_name += '_'
migrator_name = base_name + dmn.id.to_s + "_m"
migrator_password = Base64.encode64(Digest::SHA1.hexdigest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}"))[0..7]

if create_database
dmn.update_attribute(:file_store, dmn.id)

ActiveRecord::Base.connection.execute("CREATE DATABASE " + dmn.database)

# Create the migrator user
ActiveRecord::Base.connection.execute("GRANT ALL ON #{dmn.database}.* TO '#{migrator_name}'@'%' IDENTIFIED BY '#{migrator_password}'")
ActiveRecord::Base.connection.execute("GRANT ALL ON #{dmn.database}.* TO '#{migrator_name}'@localhost IDENTIFIED BY '#{migrator_password}'")

options = { 'production' => {
'adapter' => db_adapter,
'socket' => db_socket,
'database' => dmn.database,
'username' => migrator_name,
'password' => migrator_password,
'encoding' => db_encoding,
'file_store' => dmn.id,
'host' => db_host
},
'migrator' => {
'adapter' => db_adapter,
'socket' => db_socket,
'database' => dmn.database,
'username' => migrator_name,
'password' => migrator_password,
'encoding' => db_encoding,
'file_store' => dmn.id,
'host' => db_host
}
}


if dmn.domain_database
dmn.domain_database.update_attributes :options => options, :name => dmn.database
else
dmn.create_domain_database :client_id => dmn.client_id, :name => dmn.database, :options => options
end
dmn.save

ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.establish_connection(options['migrator'])

DomainModel.activate_domain(dmn.get_info,'production')

ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/")

ActiveRecord::Base.establish_connection(db_config)

# And create any initial data as necessary
Domain.initial_domain_data

if ENV['INITIALIZER']
cls = ENV['INITIALIZER'].constantize
cls.run_domain_initializer(dmn)
end

dmn.status = 'initialized'
dmn.save
end
end
end
33 changes: 20 additions & 13 deletions script/quick_install.rb
Expand Up @@ -5,6 +5,15 @@
require 'fileutils'
require 'yaml'
require 'rubygems'

require File.expand_path('../../config/webiva_bundler', __FILE__)
if Webiva::Bundler.create_gemfile?
puts "Setting up Gemfile"
system('gem install bundle --no-rdoc --no-ri')
Webiva::Bundler.setup
system('bundle install')
end

require 'memcache'

ROOT_FOLDER = File.dirname(__FILE__) + "/.."
Expand Down Expand Up @@ -49,6 +58,7 @@ def wrap(str, style="\033[4m\033[1m")


def run_standalone_install
setup_gemfile
get_server_name()
get_mysql_user_and_db_name()
create_master_database()
Expand All @@ -62,6 +72,7 @@ def run_standalone_install
end

def run_master_server_install
setup_gemfile
get_server_name()
get_mysql_user_and_db_name()
create_master_database()
Expand All @@ -76,20 +87,27 @@ def run_master_server_install
end

def run_slave_server_install
setup_gemfile
get_server_name()
validate_configs_exists()
validate_memcache_servers()
add_server_to_db()
display_success_message()
end

def setup_gemfile
return unless Webiva::Bundler.create_gemfile?
puts "Setting up Gemfile"
Webiva::Bundler.setup
system('bundle install')
end

def report_error(ok,msg)
return if ok
puts(msg);
exit(1)
end


def input_value(str,default='')
print(str)
val = @input.gets.strip
Expand Down Expand Up @@ -268,7 +286,7 @@ def create_initial_yml_files

@db_socket = `mysql_config --socket`.to_s.strip

if @db_socket.to_s == ''
if @db_socket.to_s == '' || !File.exists?(@db_socket.to_s)
@db_socket = File.exists?('/var/lib/mysql/mysql.sock') ? '/var/lib/mysql/mysql.sock' : '/var/run/mysqld/mysqld.sock'
@db_socket = File.exists?(@db_socket) ? @db_socket : '/tmp/mysql.sock'
end
Expand Down Expand Up @@ -343,17 +361,6 @@ def create_domain_db

end

def build_local_gems
print("Building local gems")

system("find #{ROOT_FOLDER}/vendor/gems '*.o' -print | xargs rm")
system("find #{ROOT_FOLDER}/vendor/gems '*.so' -print | xargs rm")
system("find #{ROOT_FOLDER}/vendor/gems '*.out' -print | xargs rm")

ok = system("rake gems:build:force")
report_error(ok,'building of local gems failed, please run rake --trace gems:build:force manually')
end

def display_success_message

puts("\n" + <<-EOF)
Expand Down
2 changes: 1 addition & 1 deletion spec/models/domain_log_souce_spec.rb
Expand Up @@ -8,7 +8,7 @@
queue_session_klass = nil
begin
result = DomainModel.connection.execute "show tables like 'market_campaign_queue_sessions'"
if result.num_rows > 0
if result.size > 0
queue_session_klass = Module.const_get('MarketCampaignQueueSession')
reset_domain_tables :market_campaign_queue_session
end
Expand Down
9 changes: 2 additions & 7 deletions spec/webiva_spec_helper.rb
Expand Up @@ -71,13 +71,8 @@ def truncate_table(table_name)
end

def save_test_domain
result = connection.execute("SELECT * FROM domains WHERE id = #{CMS_DEFAULTS['testing_domain']}")
@domain = {}
result.each_hash { |row| @domain = row }

@domain_database = {}
result = connection.execute("SELECT * FROM domain_databases WHERE id = #{@domain['domain_database_id']}")
result.each_hash { |row| @domain_database = row }
@domain = connection.select_one("SELECT * FROM domains WHERE id = #{CMS_DEFAULTS['testing_domain']}")
@domain_database = connection.select_one("SELECT * FROM domain_databases WHERE id = #{@domain['domain_database_id']}")
end

def create_test_domain
Expand Down

0 comments on commit 300b16c

Please sign in to comment.