Last active
October 3, 2018 03:17
-
-
Save tpokorra/b2e34238dea0243572e822f649a35bab to your computer and use it in GitHub Desktop.
Discourse generator of a test database
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# can be used to generate a mock db for profiling purposes | |
# we want our script to generate a consistent output, to do so | |
# we monkey patch array sample so it always uses the same rng | |
class Array | |
RNG = Random.new(1098109928029800) | |
def sample | |
self[RNG.rand(size)] | |
end | |
end | |
# based on https://gist.github.com/zaius/2643079 | |
def unbundled_require(gem) | |
if defined?(::Bundler) | |
spec_path = Dir.glob("#{Gem.dir}/specifications/#{gem}-*.gemspec").last | |
if spec_path.nil? | |
raise LoadError | |
end | |
spec = Gem::Specification.load spec_path | |
spec.activate | |
end | |
begin | |
require gem | |
end | |
end | |
def sentence | |
@gabbler ||= Gabbler.new.tap do |gabbler| | |
story = File.read(File.dirname(__FILE__) + "/alice.txt") | |
gabbler.learn(story) | |
end | |
sentence = "" | |
until sentence.length > 800 do | |
sentence << @gabbler.sentence | |
sentence << "\n" | |
end | |
sentence | |
end | |
def create_admin(seq) | |
User.new.tap { |admin| | |
admin.email = "admin@localhost#{seq}.fake" | |
admin.username = "admin#{seq}" | |
admin.password = "password12345abc" | |
admin.save! | |
admin.grant_admin! | |
admin.change_trust_level!(TrustLevel[4]) | |
admin.activate | |
} | |
end | |
require File.expand_path(File.dirname(__FILE__) + "/../config/environment") | |
SiteSetting.queue_jobs = false | |
unless Rails.env == "production" | |
puts "This script should only be used in the profile environment" | |
exit | |
end | |
# by default, Discourse has a "system" and `discobot` account | |
# and in my setup I have an admin account configured | |
if User.count > 3 | |
puts "Only run this script against an empty DB" | |
exit | |
end | |
require 'optparse' | |
begin | |
unbundled_require 'gabbler' | |
rescue LoadError | |
puts "installing gabbler gem" | |
puts `gem install gabbler` | |
unbundled_require 'gabbler' | |
end | |
puts "Creating 10 users" | |
users = 10.times.map do |i| | |
putc "." | |
create_admin(i) | |
end | |
puts | |
puts "Creating 10 categories" | |
categories = 10.times.map do |i| | |
putc "." | |
Category.create(name: "category#{i}", text_color: "ffffff", color: "000000", user: users.first) | |
end | |
puts | |
puts "Creating 50 topics" | |
topic_ids = 50.times.map do | |
post = PostCreator.create(users.sample, raw: sentence, title: sentence[0..50].strip, category: categories.sample.name, skip_validations: true) | |
putc "." | |
post.topic_id | |
end | |
puts | |
puts "creating 200 replies" | |
200.times do | |
putc "." | |
PostCreator.create(users.sample, raw: sentence, topic_id: topic_ids.sample, skip_validations: true) | |
end | |
# no sidekiq so update some stuff | |
Category.update_stats | |
Jobs::PeriodicalUpdates.new.execute(nil) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
this is from https://github.com/discourse/discourse/blob/master/script/profile_db_generator.rb
plus my modifications: