Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

comunit-base

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

comunit-base

  • 0.37.200628.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

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/ckeditor
/public/post_illustrations

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

.env

Добавление JS

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

yarn add jquery
yarn add @biovision/biovision
yarn add @biovision/posts
yarn add @biovision/comments
yarn add @biovision/votes
yarn add @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 'autoprefixer-rails', group: :production

gem 'biovision-base', git: 'https://github.com/Biovision/biovision-base'
# gem 'biovision-base', path: '/Users/maxim/Projects/Biovision/gems/biovision-base'
gem 'biovision-post', git: 'https://github.com/Biovision/biovision-post'
# gem 'biovision-post', path: '/Users/maxim/Projects/Biovision/gems/biovision-post'
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 'biovision-poll', git: 'https://github.com/Biovision/biovision-poll'
# gem 'biovision-poll', path: '/Users/maxim/Projects/Biovision/gems/biovision-poll'
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

group :development do
  gem 'mina'
end

Пример .env

RAILS_MAX_THREADS=5
DATABASE_PASSWORD=
MAIL_PASSWORD=
SITE_ID=

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

Добавления в 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

В версии рельсов с 5.2 вместо secrets.yml используется credentials.yml. Для работы с ним нужно запустить в консоли 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/ckeditor', '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 = NetworkManager::RegionHandler.new(site)
Region.order('id asc').each { |r| print "\r#{r.id}    "; h.create_remote(r) }; 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.

FAQs

Package last updated on 28 Jun 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc