0.0
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
Users, posts, news, regions, sites and blogs
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Project Readme

Comunit::Base

Основной функционал для сайтов сети comunit.

Действия для создания нового сайта сети

Нужно заменить config/locales/en.yml на ru.yml и добавить туда ключи shared.meta_texts.site_name и copyright для вывода названия сайта в метаданных и копирайта соответственно.

Также нужно добавить в локаль ключ index.index.title с заголовком для главной страницы.

Добавления в .gitignore

Стоит убрать строки !log/.keep и !tmp/.keep, так как log и tmp создаются на сервере как ссылки в любом случае.

/public/uploads
/public/post_illustrations

/spec/examples.txt
/spec/support/uploads/*

.env

Добавление JS

После установки (rails new .) нужно добавить в yarn пакеты из компонентов.

yarn add jquery @biovision/comunit

Добавить в config/webpack/environment.js со второй строки этот фрагмент:

const webpack = require('webpack')
environment.plugins.prepend('Provide',
    new webpack.ProvidePlugin({
        $: 'jquery/src/jquery',
        jQuery: 'jquery/src/jquery'
    })
)

Добавить в app/javascript/pack/application.js эти строки:

require("jquery")
require("@biovision/biovision")
require("@biovision/posts")
require("@biovision/comments")
require("@biovision/votes")
require("@biovision/comunit")

Дополнения в Gemfile

gem 'biovision-base', git: 'https://github.com/Biovision/biovision-base'
# gem 'biovision-base', path: '/Users/maxim/Projects/Biovision/gems/biovision-base'
gem 'biovision-comment', git: 'https://github.com/Biovision/biovision-comment'
# gem 'biovision-comment', path: '/Users/maxim/Projects/Biovision/gems/biovision-comment'
gem 'biovision-vote', git: 'https://github.com/Biovision/biovision-vote'
# gem 'biovision-vote', path: '/Users/maxim/Projects/Biovision/gems/biovision-vote'
gem 'comunit-base', git: 'https://github.com/Biovision/comunit-base'
# gem 'comunit-base', path: '/Users/maxim/Projects/Biovision/Comunit/comunit-base'

group :development, :test do
  gem 'database_cleaner'
  gem 'factory_bot_rails'
  gem 'rspec-rails'
end

Пример .env

RAILS_MAX_THREADS=5
DATABASE_PASSWORD=
MAIL_PASSWORD=
SITE_ID=

DATABASE_PASSWORD создаётся через random.org, MAIL_PASSWORD — или через интерфейс внешнего почтовика, или через тот же random.org. SITE_ID берётся из админки comunit (UUID сайта).

Добавления в app/assets/

Заменить app/assets/stylesheets/application.css на application.scss из sample/app/assets/stylesheets/.

Примеры для shared и layout можно найти там же (просто скопировать поверх текущих файлов).

Дополнения в config/*.yml

Для начала нужно убедиться в правильности содержимого database.yml

  • Названия баз
  • Наличие host: localhost в разделе production
  • Правильный ключ в ENV в production.password (DATABASE_PASSWORD), такой же, как в .env

Добавление жетона для работы с API

Нужно запустить в консоли EDITOR=vim rails credentials:edit. В список необходимо добавить этот параметр:

  signature_token: ...

Значение для signature_token берётся из админки на центральном сайте. Структура — <site_id>:<token>.

Добавление в config/application.rb

Чтобы была нормальная временная зона, нужно её задать в application.rb в блоке конфигурации:

  config.time_zone = 'Moscow'

Дополнения в config/puma.rb

Нужно закомментировать строку с портом (port ENV.fetch('PORT') { 3000 }), это 12 строка на момент написания инструкций.

Нужно поменять example.com на актуальный домен.

if ENV['RAILS_ENV'] == 'production'
  shared_path = '/var/www/example.com/shared'
  logs_dir    = "#{shared_path}/log"

  state_path "#{shared_path}/tmp/puma/state"
  bind "unix://#{shared_path}/tmp/puma.sock"
  stdout_redirect "#{logs_dir}/stdout.log", "#{logs_dir}/stderr.log", true

  activate_control_app
end

Дополнения в spec/rails_helper.rb ($ rails generate rspec:install)

Раскомментировать строку 23 (включение содержимого spec/support)

RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

Дополнения в spec/spec_helper.rb

RSpec.configure do |config|
  config.after(:all) do
    if Rails.env.test?
      FileUtils.rm_rf(Dir["#{Rails.root}/spec/support/uploads"])
    end
  end
end

Дополнения в config/environments/production.rb

Нужно раскомментировать строку config.require_master_key = true (19 на момент написания).

Нужно заменить уровень журналирования ошибок с :debug на :warn. Это в районе 51 строки (config.log_level).

Для настройки почты нужно поменять example.com на актуальный домен ниже.

Вариант для mail.ru

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      address: 'smtp.mail.ru',
      port: 465,
      tls: true,
      domain: 'example.com',
      user_name: 'webmaster@example.com',
      password: ENV['MAIL_PASSWORD'],
      authentication: :login,
      enable_starttls_auto: true
  }
  config.action_mailer.default_options = {
      from: 'example.com <webmaster@example.com>',
      reply_to: 'support@example.com'
  }
  config.action_mailer.default_url_options = { host: 'example.com' }

Дополнения в config/environments/test.rb

Нужно поменять example.com на актуальный домен

  config.action_mailer.default_options = {
      from: 'example.com <webmaster@example.com>',
      reply_to: 'support@example.com'
  }
  config.action_mailer.default_url_options = { host: '0.0.0.0:3000' }

Дополнения в config/environments/development.rb

Нужно поменять example.com на актуальный домен

  config.action_mailer.delivery_method = :test
  config.action_mailer.default_options = {
      from: 'example.com <webmaster@example.com>',
      reply_to: 'support@example.com'
  }
  config.action_mailer.default_url_options = { host: '0.0.0.0:3000' }

После настройки

bundle binstubs bundler --force
bundle binstub puma
rails db:create
rails railties:install:migrations

rails db:migrate
mina init

После этого нужно отредактировать config/deploy.rb.

# В самом начале, 3 строка
require 'mina/rbenv'

#...
set :shared_dirs, fetch(:shared_dirs, []).push('log', 'tmp', 'public/uploads', 'public/post_illustrations')
set :shared_files, fetch(:shared_files, []).push('.env', 'config/master.key')

# В том месте, где task :environment, сразу после
task :remote_environment do
  invoke :'rbenv:load'
end

На сервере в рабочей папке (var/www/example.com):

mkdir -p shared/tmp/puma
mkdir -p shared/tmp/pids
mkdir -p shared/tmp/import
mkdir -p shared/public/uploads/region
mkdir -p shared/config
cd shared/public
ln -s /var/www/shared/post_illustrations
cd uploads/region
ln -s /var/www/shared/uploads/region/image

После этого локально можно запустить mina setup и настроить остальное на стороне сервера.

В бою

Для начала нужно создать базу данных. Это делается руками через Postgres.

Через random.org (https://www.random.org/passwords/) сгенерировать один пароль длиной около 12 символов.

Этот пароль нужно прописать в файле .env в отвечающем за БД параметре (его можно посмотреть в config/database.yml в разделе production, он называется или DATABASE_PASSWORD, или с приставкой в начале).

В общем случае там должно быть примерно это:

RAILS_MAX_THREADS=5
DATABASE_PASSWORD=<сюда вписать пароль>
MAIL_PASSWORD=<сюда вписать пароль>

Далее манипуляции с базой данных.

sudo su postgres

Дальше нужно создать пользователя и БД для проекта. Данные берутся из config/database.yml из раздела production (пароль был сгенерирован и скопирован в .env, его стоит взять оттуда). Для примера указан пользователь example и база тоже example

createuser -d -P example

Далее заходим под этим пользователем в постгрес:

psql -h localhost -U example postgres

создаем базу с правильными параметрами (внимательно с кавычками):

create database example template template0 encoding='UTF8' LC_COLLATE='ru_RU.UTF-8' LC_CTYPE='ru_RU.UTF-8';

Выходим из базы (^D). Возвращаемся в предыдущего пользователя (^D).

В папке проекта разместить файл конфигурации nginx host.conf

Далее:

cd /etc/nginx/sites-enabled
sudo ln -s /var/www/example.com/host.conf example.com
cd /etc/logrotate.d

Нужно скопировать ротацию логов любого соседнего проекта на новый и внести соответствующие правки:

cp example.org example.com
vim example.com
:%s/example\.org/example.com/g
:wq

Проверяем конфиг nginx:

sudo /etc/init.d/nginx configtest

Если есть ошибки, они дописываются в /var/log/nginx/error.log Если всё хорошо, то:

sudo /etc/init.d/nginx reload

Дальше снова локально.

Нужно убедиться, что в репозитории всё актуально, и выполнить:

mina setup
mina deploy

Если всё прошло хорошо, то снова зайти по ssh как developer и запустить пуму.

Добавить параметры для запуска пумы при перезагрузке сервера (sudo /etc/puma.conf) по аналогии с тем, что там указано.

Нужно импортировать регионы (устарело)

В папке tmp/import:

ln -s /var/www/shared/import/regions
ln -s /var/www/shared/import/regions.yml

В папке проекта (current):

bin/rails regions:import

Занесение сайта в сеть (устарело)

В консоли comunit.online.

site = Site.find(site_id)
Site.where(active: true).each { |s| NetworkManager.new(s).push_site(site) }

m = NetworkManager.new(site)
Site.order('id asc').each { |s| m.push_site(s) }

h = Comunit::Network::Handlers::RegionHandler.new(site)
Region.order('id asc').each { |r| print "\r#{r.id}    "; h.entity = r; h.push }; puts

h = NetworkManager::UserHandler.new(site)
User.order('id asc').each { |u| puts "#{u.id} #{u.slug}"; h.create_remote(u) }

License

The gem is available as open source under the terms of the MIT License.