최근 Ruby 웹 프로젝트를 맡았습니다. 이전에 Ruby 및 관련 웹 개발을 접한 적이 없고 프로젝트에 문서가 누락되어 있을 때 우회했습니다. 프로젝트 배포. 마지막으로 여러 Ruby on Rails 개발 환경 배포를 참고하고 Ruby에서 gem/번들러 간의 관계를 학습하여 프로젝트 배포에 성공했습니다. 여기에 적어보세요. 간략한 요약이며, 루비 웹 개발을 막 시작하는 경우 배포 환경에 대한 참고 자료가 될 수도 있습니다.
우리 프로젝트는 padrino 기반 프로젝트라면 Rails 기반 프로젝트라면 배포 방식도 비슷할 것입니다.
1. Ruby 설치
시스템에는 여러 Ruby 관련 프로젝트가 있을 수 있으므로 Ruby마다 다른 프로젝트를 개발해야 할 수도 있습니다. 버전 또는 테스트이므로 여러 Ruby 버전을 시스템에 설치해야 할 수도 있습니다. 이를 위해서는 기존 버전을 관리하고 새 버전을 설치하기 위한 해당 도구가 필요합니다. 여기서는 rbenv를 선택했지만 이전 rvm을 사용할 수도 있습니다.git clone git://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc exec $SHELL
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc exec $SHELL
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
wget -O ~/.rbenv/versions/ruby-2.1.5.tar.gz http://ruby.taobao.org/mirrors/ruby/2.1/ruby-2.1.5.tar.gz env RUBY_BUILD_MIRROR_URL=file:///home/ziven/.rbenv/versions/ruby-2.1.5.tar.gz# ~/.rbenv/bin/rbenv install 2.1.5
RUBY_BUILD_MIRROR_URL
2. 필수 컴포넌트 설치
프로젝트에 필요한 gem을 관리하기 위해 일반적으로 번들러를 사용하기 때문에 여기에 번들러를 설치해야 합니다.gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/
gem install bundler
3. 배포
a. 웹 소스 코드를 적절한 위치에 복제합니다
복제 후 소스 코드는 /opt/projectA에 있다고 가정합니다. b. > 프로젝트의 루트 디렉터리에서 실행:
여기에서 실행되는 명령은 상황에 따라 약간 다를 수 있다는 점에 유의해야 합니다. 예를 들어 프로덕션 환경에 배포할 때bundle install
bundle install --deployment --without development test
이 프로젝트는 padrino 기반이므로 실행해야 합니다.
padrino rake --envir db:migrate
bundle exec padrino rake --envir db:migrate
bundle exec padrino rake --envir seed
해당 유니콘 시작 스크립트가 필요할 수 있습니다. 여기에서 중국의 unicorn.rb가 작성한 Ruby를 참조할 수 있습니다. 여기서는 생략합니다.
유니콘 서버 시작:bundle exec unicorn -E production -c unicorn.rb -D
nginx는 일반 Linux 소프트웨어와 동일한 방법으로 설치할 수 있습니다. 소스코드 설치 방법을 사용하는 것을 권장합니다. 여기서는 단순화를 위해 패키지 관리자 설치 방법을 사용하여 임시로 설치하겠습니다.
sudo apt-get install nginx-full
upstream myserver { server unix:/tmp/projectA.sock fail_timeout=0; } server { listen 7788; server_name localhost; client_max_body_size 10M; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } root /opt/projectA/web/public; try_files $uri $uri.html @app; location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://myserver; } }
unix:/tmp/projectA.sock