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.