Статьи



Ещё один скромный вклад в Open Source, об уязвимости CVE-2017-17405

Ещё один скромный вклад в Open Source, об уязвимости CVE-2017-17405
Недавно столкнулся с неприятным сюрпризом. Неочень приятно видеть непрошенных гостей из Китая у себя на сервере)) Решил что русскоязычному сообществу следует знать об...
Посмотреть всю статью

Недавно столкнулся с неприятным сюрпризом. Неочень приятно видеть непрошенных гостей из Китая у себя на сервере)) Решил что русскоязычному сообществу следует знать об этой уязвимости и перевёл статью для сообщества.

Ссылка на переведённую мною статью про уязвимость CVE-2017-17405

Показать только превью
Оставить комментарий




iziToast-rails gem - integrate whithout pain.

iziToast-rails gem - integrate whithout pain.
Recently wrote a gem. Check it out Really good looking notifications + without any dependencies!
Посмотреть всю статью

Recently wrote a gem. Check it out

Really good looking notifications + without any dependencies!

Показать только превью
Оставить комментарий




Zeus и shoulda-matcher

Zeus и shoulda-matcher
Если у вас возникли проблемы с гемом shoulda-matcher после установки и запуска гема Zeus, не надо сразу откатывать всю разработку назад и прощаться с...
Посмотреть всю статью

Если у вас возникли проблемы с гемом shoulda-matcher после установки и запуска гема Zeus, не надо сразу откатывать всю разработку назад и прощаться с зевсом.
Попробуйте сделать следующее:

В Gemfile:

gem 'shoulda-matchers', require: false

А в файл spec/rails_helper.rb если присутствует, или в spec/spec_helper.rb пропишите:

require 'rspec/rails'
require 'shoulda/matchers'

Должно заработать. Удачи!

Показать только превью
Оставить комментарий




TDD и почему нам это важно! Дядя Боб (Robert C. Martin)

TDD и почему нам это важно! Дядя Боб (Robert C. Martin)
Признаюсь, я не хотел внедрять TDD потому что было ленно писать код "который ничего не создаёт и не делает". Но философия дяди Боб-а мне очень понравилась. Как...
Посмотреть всю статью

Признаюсь, я не хотел внедрять TDD потому что было ленно писать код "который ничего не создаёт и не делает". Но философия дяди Боб-а мне очень понравилась. Как говорилось у Карлоса Кастанеды :

"Вещи не меняются, меняется лишь наш взгляд на них."

С сегодняшнего дня я начну внедрять ТDD в свои проекты. Хоть дядя Боб и говорит что внедрение тестов в уже написанный код "безумие не стоящее и гроша" я сделаю это, скажем так - для общего развития. Начну с последнего проекта "Conversation App".

Рекомендую всем посмотреть видео ниже. Если вы сомневаетесь в пользе тестов и существующие аргументы вас не убеждают, Дядя Боб поможет вам взглянуть на это по другому, да так, что вам придётся уже искать причину не следовать TDD (сразу предупрежу, лень - это не причина). Ну и попутно вы узнаете интересное про архитектуры, и особенности архитектур приложений.

Смотрим видео.

Показать только превью
Оставить комментарий




Deploy Rails приложения с Capistrano, Nginx, Unicorn. Часть 3\3

Deploy Rails приложения с Capistrano, Nginx, Unicorn. Часть 3\3
Эта учебная статья, из нескольких частей (часть 3\3), предполагает что вы уже умеет входить на сервер через SSH, поэтому в местах про "заходим/выходим/перезаходим на...
Посмотреть всю статью

Первая часть и вторая часть про настройки сервера. Перейдём к третьей части.

Произведём некоторые настройки на нашей ЛОКАЛЬНОЙ машине(на вашем компютере где вы разработали ваше приложение)

Создайте в корне приложения файл .ruby-version (с точкой в начале) и впишите в неё версию руби

2.2.2

Внесите изменения в Gemfile

ruby '2.2.2'

gem 'unicorn'

gem 'capistrano-rails', group: :development

Запустите bundler и установите гемы

bundle install

Установите заглушки (binstubs) для Capistrano

bundle binstubs capistrano

Инициализируем capistrano

bin/cap install

В файл Capfile, в корне вашего приложения, сразу после require 'capistrano/deploy' добавьте следующую строчку

require 'capistrano/rails'

Добавьте / Замените конфигурации в config/deploy.rb

set :application, 'myrailsapp'
set :repo_url, 'https://github.com/BadAllOff/myrailsapp.git'
set :deploy_to, '/opt/www/myrailsapp'
set :user, 'deploy'
set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets}

#файлы ниже надо будет создать на сервере
append :linked_files, 'config/master.key', 'config/database.yml'

namespace :deploy do
 %w[start stop restart].each do |command|
   desc 'Manage Unicorn'
   task command do
     on roles(:app), in: :sequence, wait: 1 do
       execute "/etc/init.d/unicorn_#{fetch(:application)} #{command}"
     end
   end
 end

 after :publishing, :restart
end

У меня бывал глюк с подключением по SSH, решилось заменой на HTTPS адрес

set :repo_url, 'https://github.com/BadAllOff/myrailsapp.git'

Если же надо подключиться к приватному репозиторию, можно сделать следующим образом:

set :repo_url, "https://#{ENV['GITHUB_USERNAME']}:#{ENV['GITHUB_PASSWORD']}@github.com/BadAllOff/myrailsapp.git"

ENV['GITHUB_USERNAME'] и ENV['GITHUB_PASSWORD'] можно указать в переменных окружения, Capistrano это обычный руби код и все правила руби в нём работают. Переменные окружения можно глянутьв консоли рельсов 'rails c'


 

Изменим конфигурацию в /config/deploy/production.rb на ip вашего сервера или доменное имя. Тут мы как бы ролям app web и db дали полномочия пользователя deploy на сервере

role :app, %w{deploy@0.0.0.0}

role :web, %w{deploy@0.0.0.0} # Управляет asset pipeline

role :db, %w{deploy@0.0.0.0} # Работает с БД

Создадим config/unicorn.rb файл с таким контентом (незабываем изменять myrailsapp если у вас свои названия для папок и прочее):

root = "/opt/www/myrailsapp/current"

working_directory root

pid "#{root}/tmp/pids/unicorn.pid"

stderr_path "#{root}/log/unicorn.log" # логи ошибок

stdout_path "#{root}/log/unicorn.log" # логи сервака

listen "/tmp/unicorn.myrailsapp.sock"

worker_processes 1

timeout 30

Закомментируем username и password в config/database.yml. На сервере наше приложение будет использовать имя пользователя под которым запущенно приложение (т.е. deploy) как название РОЛИ для базы данных. А мы помним что специально для этого мы ранее и создали роль deploy в posтgres-е. Поэтому переопределение имени пользователя нам только помешает подключиться.

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

production:

  <<: *default
  database: myrailsapp_production
  host: '' 
  username: deploy

Но конечно ничто вам не мешает создать в postgres ещё одну роль под именем “myrailsapp”, дать ей права на определённую бд, и записать её пароль в переменную окружения на сервере. Это уже на ваше усмотрение, как вам удобно. Внизу я покажу куда можно записать пароль если вы решите следовать таким путём.

Внесём изменения в наш репозиторий на git

git add .

git commit -m 'Added settings to deploy app'

git push

Создадим секретный ключ для использования на сервере

bin/rake secret

НА СЕРВЕРЕ! Заходим на сервер под пользователем username.

Установим переменные окружения:

sudo
nano /home/deploy/.bashrc

Сразу после строчек

export PATH="$HOME/.rbenv/bin:$PATH"

eval "$(rbenv init -)"

впишите следующее:

export SECRET_KEY_BASE=ВАШСГЕНЕРИРОВАННЫЙСЕКРЕТНЫЙКЛЮЧЬ

В Rails 5.2 еще используеться файл secrets.yml но он обявлен устаревшим. Теперь всё данны храняться в защифрованном виде в файле credentials.yml.enc (редактировать который можно командой: EDITOR=nano bin/rails secrets:edit). Нужно также ввести новую переменную окружения для расшифровки файла. Там же, в файле .bashrc, вводим новую переменную (название рекомендовано самими рельсами), значение для переменной берем из файла /config/master.key:

export RAILS_MASTER_KEY=STRINGFROMMASTERKEYFILE

Если вы решили всё таки использовать другу роль для подключения к бд, cюда же вы можете вписать и пароль от вашего БД

export MYRAILSAPP_DATABASE_PASSWORD=ВАШПАРОЛЬОТДБ

ПРИМЕЧАНИЕ! Если вы УЖЕ используете гем Devise в вашем приложении, то добавьте строку в /config/initializers/devise.rb

config.secret_key = ENV['DEVICE_CONFIG_SECRET_KEY']

и добавить в окружение переменную

export DEVICE_CONFIG_SECRET_KEY='секретныйключьможетесгенерироватьегосами'

Сохраним, дадим башу перегрузить переменные

. ~/.bashrc

и перезапускаем nginx

sudo service nginx restart

НА ВАШЕМ КОМПЮТЕРЕ запустим некоторую предварительную проверку

bin/cap production git:check

если появится ошибка:

DEBUG [4618dd23] Warning: Permanently added 'github.com,192.30.252.129' (RSA) to the list of known hosts.

DEBUG [4618dd23] Permission denied (publickey).

DEBUG [4618dd23] fatal: Could not read from remote repository.

DEBUG [4618dd23]

DEBUG [4618dd23] Please make sure you have the correct access rights

DEBUG [4618dd23] and the repository exists.

Попробуйте изменить строку set :repo_url в config/deploy.rb на https :

set :repo_url, 'https://github.com/RebelioUS/myrailsapp.git'

ещё одна проверка (должна пройти без запинки):

bin/cap production deploy:check

И вот! Торжественный момент развёртывания Вашего приложения!

bin/cap production deploy

Зайдём на наш домен и ...

ВУАЛЯ! Работает!

Теперь после каждого коммита на гитхаб Вы можете перезапустить сервер с обновлённым приложением одной командой

bin/cap production deploy

Для полной уверенности перегрузите сервер

sudo reboot

Поздравляю Вас с запуском вашего приложения! Оставьте отзыв если это Вам помогло или возникнут какие либо проблемы. Постараюсь помочь Вам в решении, да и сам опыта наберусь (так как представляется мне, что хоть я и учёл самые важные ошибки, их может быть гораздо больше). Спасибо!

Показать только превью
Оставить комментарий