Pull to refresh

Comments 33

Что меня раздражает в cap3, (и почему я до сих пор пользуюсь cap2) — то, что нужно явно указывать окружение, и его имя должно совпадать с файлами из config/deploy/. Это означает:
а) нет дефолтного окружения;
б) невозможно динамически создавать окружения (например, если нужны 5 стейджингов, нужно создавать 5 почти одинаковых файлов конфигурации).

Или я недостаточно проникся, и это можно обойти?
a) Да, стандартное окружение указать нельзя.
б) Можно использовать енвайронмент переменные для динамики. Например:
set :branch, ENV['BRANCH'] || 'master'


И вызывать, что-то наподобие этого:
cap production deploy BRANCH=master
а) стандартное окружение можно указать, просто в конец Capfile добавляем:
invoke :production

Теперь при выполнении cap deploy будет по умолчанию использоваться production stage
Спасибо, не знал об этом. Пробовал указать default_stage, не работало. И нагуглить не удалось инфы об этом.
> нет дефолтного окружения;

Нет и не нужно. А то приедет к вам от другого члена команды коммит, в котором default_state меняется со staging на production, а Вы по привычке сделаете cap deploy… Особенно если миграции при деплое прогоняются автоматически.
Нет, такие ответственные вещи, как деплой, должны проводится сознательно.
Если сильно раздражает, вы всегда можете у себя сделать алиас для команды, как вам удобно. Например в ~/.bash_profile прописать строчку:

alias deploy="cap staging deploy"


И в консоли потом выполнять просто deploy
а я cap3 так и не поборол, до сих пор пользуюсь 2.15.
Может сейчас пойдет?

Спасибо большое!
я использую ubuntu 12.04 LTS
sudo make install
Я слышал, что в приличных обществах админов за такое четвертуют.
Спасибо за замечание, теперь буду знать.
В статье исправил на checkinstall.
Зачем выставлять порт postgresql (и как я понял, порт redis тоже) наружу? Почему нельзя прокинуть порт через ssh для доступа с локального компьютера?
Хорошее замечание, тем более, что pgAdmin3 умеет сам пробрасываться через ssh-туннель из коробки, а про всякие гуйцы для redis'а я не особо в курсе (да и я так думаю, что доступ к production-редису вряд ли понадобится, впрочем, если такая нужда и возникнет, его можно пробрасывать с помощью SSH-конфига на машине разработчика)
Можно конечно, но я не вижу опасности в том, что они торчат наружу. Тем более я привык к phppgadmin, который не умеет ходить по туннелю.
Ну и на заметку любителям модуля pagespeed:
stackoverflow.com/questions/19160737/nginx-fastcgi-cache-performance-disk-cached-vs-tmpfs-cached-vs-static-file/19188057#19188057

Компилируя половину Хромиума в nginx не стоит удивляться, что последний после этого начинает кушать CPU и выдавать не более 15 запросов в секунду даже для статических файлов.
Люблю я вас, рубистов, за то, что классно у вас все выходит в частностях. Но вот внятно объяснить что как работает, чтобы самому потом сесть и поехать — ну ни у кого не получается. Продакшен и деплой у рельсов, при всех преимуществах, — адов ад.
Видимо, изнутри этого понимания не ясно «а что тут можно не понимать».
Я хотя помню тоже сначала Rails не понял, писал год на JavaEE, с многомеговыми конфигами, Spring, городил MVC, потом, спустя год, увидел Rails и мне сразу все стало ясно Ж)

Ну тут правда не простой вариант настройки, имхо.
Вот Ruby EE давал хороший скрипт — он просто качал все что нужно, компилил и все.

А Capistrano я тоже до сих пор второй использую
Поиск по «Capistrano» показывает, что последняя статья на хабре (до этой) — за 2009 год. Вот я худо-бедно разобрался со второй версией, и там хоть было ясно что за чем происходит (ну на уровне, что после деплоя выполняется шел-скрипт, перегружающий unicorn); при желании можно было все повторить поэтапно руками.

А что мы имеем в искомой статье? Правильно: ставим один гем, ставим другой гем, а теперь
внутри 'namespace :deploy do' добавляем
А дальше много-много строк кода. Я понимаю, что автор ни со зла, но правда хочется более детального подхода, потому что с рельсовыми текстами на русском совсем беда. Тем более, что вначале было что-то про «новичков».
Я все-таки что-то упустил, или вся система порастет одним местом из-за создания симлинка на database.yml уже после автоматического rake db:migrate?
Симлинк на database.yml создаётся в releases/xxxxxxxx, а не в current. А вот current создаётся уже после миграции.
Да, что-то я пропустил, спасибо
Если проследить с 2006г деплой рельсового приложения на хостинг, то этот адов ад как был, так и остается.

Сначало было модно запускать как fastcgi через lighttpd + apache, потом mongrel + apache balancer, потом apache + passenger, потом, наконец, nginx + unicorn. С ростом количества вовлеченных технологий растет и сложность деплоя, в любом из компонентов могут начаться проблемы с интеграцией.

А хочется ведь счастья как у PHPшников, херась – и на любом хостинге тебя и рельсы и базки уже готовые ждут.
самый простой деплой на рельсах можно легко сделать через git push && ssh server.com 'cd project && bundle exec thin restart', как я делал много лет назад на своём первом коммерческом проекте на rails.

стек capistrano, unicorn и т.п. создан для немного более сложных приложений, чем те, для которых пойдёт шаред хостинг с ftp для PHPшников.
Простите, не знаток, но без GitHub/BitBucket связка (Capistrano) не будет работать?
будет. просто вместо git push надо будет написать `scp ..`
Чтобы иметь доступ с локального компьютера в файле '/etc/postgresql/9.3/main/postgresql.conf' изменим параметр listen_addresses = 'localhost' на listen_addresses = '*' и добавим в файл '/etc/postgresql/9.3/main/pg_hba.conf' строчку
host all deployer ваш.внешний.ip.адрес 255.255.255.0 md5


Все современные IDE умеют через ssh тоннель заходить и это действие не обязательно или я упускаю какой-то use case?
Можно выполнять перезапуск без использования sudo и гема foreman.

set :rails_env, "production"
deploy_to = "/home/www/sites/#{application}"
set :unicorn_conf, "#{deploy_to}/current/config/unicorn.rb"
set :unicorn_pid, "#{deploy_to}/shared/pids/unicorn.pid"

namespace :deploy do

...

  desc 'Stop Unicorn'
  task :stop do
    on roles(:app) do
      if test("[ -f #{fetch(:unicorn_pid)} ]")
        execute :kill, capture(:cat, fetch(:unicorn_pid))
      end
    end
  end

  desc 'Start Unicorn'
  task :start do
    on roles(:app) do
      within current_path do
        with rails_env: fetch(:rails_env) do
          execute :bundle, "exec unicorn -c #{fetch(:unicorn_conf)} -D"
        end
      end
    end
  end

  desc 'Reload Unicorn without killing master process'
  task :reload do
    on roles(:app) do
      if test("[ -f #{fetch(:unicorn_pid)} ]")
        execute :kill, '-s USR2', capture(:cat, fetch(:unicorn_pid))
      else
        error 'Unicorn process not running'
      end
    end
  end

  desc 'Restart Unicorn'
  task :restart
  before :restart, :stop
  before :restart, :start

  after :finishing, 'deploy:cleanup'
  after :finishing, 'deploy:restart'

...

end
Так, уважаемые. За последние несколько дней я познакомился очень близко, повозясь лицом по клаве, с консолью, ssh доступом, ubuntu и т.д.
Поборол саппорт VPS и дошел таки до установки Unicorn, но никак не могу найти где же gemfile.
Да, скорее всего я туплю, но нервы мои на исходе, сижу уже много часов надо всем этим.
Самое тяжелое в разработке — оказалось деплоить приложение. Так что, прошу, знатоки, окажите поддержку.
Gemfile лежит в корневом каталоге приложения :-)
А приложение лежит на сервере в подкаталоге current каталога, заданного как deploy_to в файле config/deploy.rb.
Где находится gemfile в моем приложении, хвала Одину, я знаю. Но на сервере его еще нет, ведь я еще его не деплоил. Или я ставлю unicorn на локальный комп с которого деплою?
Capistrano сначала скопирует код на сервер (в таске deploy:update_code если память не изменяет), а потом сам запустит bundler и тот поставит все гемы, включая unicorn. Вручную ставить не надо.
Спасибо. Завтра завершу деплой.
И еще вопрос, какие хорошие ресурсы/книги есть по данному вопросу (кроме, Ruby on Rails Tutorial`a Хартла и раилс каст )?
Благодарен за помощь.
Не скомпилировались нативные расширения. В интернете ходит информация, что unicorn на windows не встанет. Засуньте его в группу production и ставьте командой bundle install --without production (т.е. не используйте unicorn локально). А лучше всего — не используйте Windows (виртуальные машины во главе с Vagrant вам в помощь).
Sign up to leave a comment.

Articles

Change theme settings