diff --git a/.env.vagrant b/.env.vagrant index 28c347c4..36fe6493 100644 --- a/.env.vagrant +++ b/.env.vagrant @@ -1,3 +1,7 @@ VAGRANT=true LOCAL_DOMAIN=gabsocial.local DB_HOST=/var/run/postgresql/ +DB_MASTER_URL=postgres:///gabsocial_development +DB_SLAVE1_URL=postgres:///gabsocial_development +DB_SLAVE2_URL=postgres:///gabsocial_development +ELASTIC_APM_ENABLED=false diff --git a/Gemfile b/Gemfile index 6d3c4281..80b5e867 100644 --- a/Gemfile +++ b/Gemfile @@ -111,7 +111,6 @@ end group :test do gem 'capybara', '~> 3.22' gem 'climate_control', '~> 0.2' - gem 'faker', '~> 1.9' gem 'microformats', '~> 4.1' gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.0' @@ -126,6 +125,7 @@ group :development do gem 'better_errors', '~> 2.5' gem 'binding_of_caller', '~> 0.7' gem 'bullet', '~> 6.0' + gem 'faker', '~> 2.15' gem 'listen' gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.3' @@ -141,6 +141,7 @@ group :development do gem 'capistrano-yarn', '~> 2.0' gem 'derailed_benchmarks' + gem 'rack-mini-profiler' gem 'stackprof' end diff --git a/Gemfile.lock b/Gemfile.lock index 35b7fe0e..12f89d88 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -227,8 +227,8 @@ GEM tzinfo excon (0.78.1) fabrication (2.21.1) - faker (1.9.6) - i18n (>= 0.7) + faker (2.15.1) + i18n (>= 1.6, < 2) faraday (1.3.0) faraday-net_http (~> 1.0) multipart-post (>= 1.2, < 3) @@ -296,7 +296,7 @@ GEM httplog (1.4.3) rack (>= 1.0) rainbow (>= 2.0.0) - i18n (1.8.7) + i18n (1.8.8) concurrent-ruby (~> 1.0) i18n-tasks (0.9.33) activesupport (>= 4.0.2) @@ -455,6 +455,8 @@ GEM rack (>= 1.0, < 3) rack-cors (1.1.1) rack (>= 2.0.0) + rack-mini-profiler (2.3.1) + rack (>= 1.2.0) rack-proxy (0.6.5) rack rack-test (1.1.0) @@ -701,7 +703,7 @@ DEPENDENCIES dotenv-rails (~> 2.7) elastic-apm (~> 3.13) fabrication (~> 2.20) - faker (~> 1.9) + faker (~> 2.15) fast_blank (~> 1.0) fastimage fog-core (<= 2.1.0) @@ -753,6 +755,7 @@ DEPENDENCIES pundit (~> 2.0) rack-attack (~> 6.0) rack-cors (~> 1.0) + rack-mini-profiler rails (= 6.0.3.4) rails-controller-testing (~> 1.0) rails-i18n (~> 6.0.0) diff --git a/Vagrantfile b/Vagrantfile index 4ca75ecf..11cddd77 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -48,8 +48,8 @@ sudo apt-get install \ libpam0g-dev \ -y -# Start Redis Server -sudo service redis-server start +# Start Redis Server on boot (and right now) +sudo systemctl enable --now redis-server # Install rvm read RUBY_VERSION < .ruby-version diff --git a/config/database.yml b/config/database.yml index 8c483cd3..03878e8d 100644 --- a/config/database.yml +++ b/config/database.yml @@ -4,26 +4,20 @@ default: &default timeout: 5000 encoding: unicode sslmode: <%= ENV['DB_SSLMODE'] || "prefer" %> + prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'false' %> development: master: - adapter: postgresql + <<: *default url: <%= ENV['DB_MASTER_URL'] %> - pool: <%= ENV['DB_POOL'] %> - timeout: 5000 - encoding: unicode slave1: - adapter: postgresql + <<: *default url: <%= ENV['DB_SLAVE1_URL'] %> - pool: <%= ENV['DB_POOL'] %> - timeout: 5000 - encoding: unicode + replica: true slave2: - adapter: postgresql + <<: *default url: <%= ENV['DB_SLAVE2_URL'] %> - pool: <%= ENV['DB_POOL'] %> - timeout: 5000 - encoding: unicode + replica: true # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". @@ -46,27 +40,13 @@ test: # prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'true' %> production: master: - adapter: postgresql - sslmode: <%= ENV['DB_SSLMODE'] || "prefer" %> - prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'false' %> + <<: *default url: <%= ENV['DB_MASTER_URL'] %> - pool: <%= ENV['DB_POOL'] %> - timeout: 5000 - encoding: unicode slave1: - adapter: postgresql - sslmode: <%= ENV['DB_SSLMODE'] || "prefer" %> - prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'false' %> + <<: *default url: <%= ENV['DB_SLAVE1_URL'] %> - pool: <%= ENV['DB_POOL'] %> - timeout: 5000 - encoding: unicode + replica: true slave2: - adapter: postgresql - sslmode: <%= ENV['DB_SSLMODE'] || "prefer" %> - prepared_statements: <%= ENV['PREPARED_STATEMENTS'] || 'false' %> + <<: *default url: <%= ENV['DB_SLAVE1_URL'] %> - pool: <%= ENV['DB_POOL'] %> - timeout: 5000 - encoding: unicode - + replica: true diff --git a/config/elastic_apm.yml b/config/elastic_apm.yml index 1a35ed53..d359457b 100644 --- a/config/elastic_apm.yml +++ b/config/elastic_apm.yml @@ -2,10 +2,12 @@ # Set service name - allowed characters: a-z, A-Z, 0-9, -, _ and space # Defaults to the name of your Rails app -service_name: <%= ENV['ELASTIC_APM_SERVICE_NAME'] || 'gabsocial' %> +service_name: <%= ENV['ELASTIC_APM_SERVICE_NAME'] || 'gabsocial' %> # Use if APM Server requires a token -secret_token: <%= ENV['ELASTIC_APM_SECRET_TOKEN'] || '' %> +secret_token: <%= ENV['ELASTIC_APM_SECRET_TOKEN'] || '' %> # Set custom APM Server URL (default: http://localhost:8200) -server_url: <%= ENV['ELASTIC_APM_URL'] || 'http://localhost:8200'%> +server_url: <%= ENV['ELASTIC_APM_URL'] || 'http://localhost:8200'%> + +enabled: <%= ENV['ELASTIC_APM_ENABLED'] || 'true' %> diff --git a/lib/tasks/dummy_data.rake b/lib/tasks/dummy_data.rake new file mode 100644 index 00000000..41b5911d --- /dev/null +++ b/lib/tasks/dummy_data.rake @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +desc 'Import dummy data into the database, to create a more realistic development experience' +task dummy_data: :environment do + raise 'Only run this in development' unless Rails.env.development? + + domain = ENV['LOCAL_DOMAIN'] || Rails.configuration.x.local_domain + + admin = Account.find_by!(username: 'admin') + + accounts = 1.upto(1_000).map do |num| + username = "#{Faker::Internet.username(separators: %w[_])}#{num}" + password = Faker::Internet.password + + Account.create!(username: username).tap do |account| + account.create_user!({ + email: "#{username}@#{domain}", + password: password, + password_confirmation: password, + agreement: true, + approved: true + }) + end + end + + accounts.each do |acct| + FollowService.new.call(admin, acct) + end + + statuses = (accounts + [admin]).map do |account| + PostStatusService.new.call(account, text: Faker::Lorem.paragraph(sentence_count: 20)) + end + + accounts.sample(200).zip(statuses.sample(200)).each do |account, status| + ReblogService.new.call(account, status) + end +end