Я использую capistrano для развертывания приложения Rails 3.1 на микроэкземпляре EC2.Я также настроил Ruby на своем EC2, используя rvm.Я использовал тонкий, но в эти выходные я переключился на Единорога, чтобы проверить это.Я поделюсь с вами тем, что делаю, и, возможно, вы сможете выяснить, как изменить его соответствующим образом, чтобы использовать Passenger (или кто-то другой может это прокомментировать).Я также приветствовал бы любые комментарии, если у людей есть некоторые предложения для любого из этого, поскольку я ни в коем случае не эксперт.:)
Я хотел бы отметить, что у меня все еще есть проблема на этапе развертывания "rake assets: precompile".Он переходит к третьему этапу assets: precompile: nodigest и завершается ошибкой без кода выхода.Я думаю может не хватило памяти.Это не откат развертывания.Если я запускаю "rake assets: precompile: nodigest", то он заканчивает только найти и все хорошо.Этого не происходит при развертывании на моей виртуальной машине для тестирования, только при развертывании на своем микроэкземпляре EC2 (что заставляет меня думать, что это может быть ошибкой OOM, так как EC2 micro крошечный, и я видел ошибки OOM в прошлом).
Несмотря на это, вот что у меня есть.Возможно, это поможет вам начать работу.
Некоторые важные вещи из моего Gemfile:
gem 'rails', '3.1.1'
group :assets do
gem 'jquery-rails',
gem 'sass-rails', "~> 3.1.4"
gem 'coffee-rails', "~> 3.1.1"
gem 'uglifier', ">= 1.0.3"
gem 'compass', :git => 'git://github.com/chriseppstein/compass.git', :branch => 'master'
end
group :production do
gem 'therubyracer'
end
gem 'unicorn'
Capfile:
load 'deploy' if respond_to?(:namespace)
load 'deploy/assets'
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy'
config / deploy.rb:
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"
require "bundler/capistrano"
role :app, "your-ec2-domain"
role :db, "your-ec2-domain", :primary => true
set :user, "your-login-username"
set :application, "your-app-name"
set :scm, :git
set :repository, "."
set :branch, "deploy" # or whatever git branch you deploy from
set :deploy_via, :copy
set :deploy_to, "/home/#{user}/rails/#{application}"
set :use_sudo, false
set :rails_env, "production"
set :rvm_ruby_string, "ruby-1.9.2-p290"
set :rvm_type, :user
set :unicorn_pid do
"#{shared_path}/pids/unicorn.pid"
end
before "deploy:assets:precompile", "bundle:install"
namespace :deploy do
task :start do
top.unicorn.start
end
task :stop do
top.unicorn.stop
end
task :restart do
top.unicorn.reload
end
end
namespace :unicorn do
desc "start unicorn server"
task :start, :roles => :app do
run "cd #{current_path} && bundle exec unicorn -E #{rails_env} -D -P #{unicorn_pid}"
end
desc "stop unicorn server"
task :stop do
run "kill -s QUIT `cat #{unicorn_pid}`"
end
desc "restart unicorn"
task :restart do
top.unicorn.stop
top.unicorn.start
end
desc "reload unicorn (gracefully restart workers)"
task :reload do
run "kill -s USR2 `cat #{unicorn_pid}`"
end
desc "reconfigure unicorn (reload config and gracefully restart workers)"
task :reconfigure, :roles => :app do
run "kill -s HUP `cat #{unicorn_pid}`"
end
end
Мой nginx.conf:
user www-data;
worker_processes 1;
pid /var/run/nginx.pid;
events {
worker_connections 768;
accept_mutex off;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay off;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Затем в / etc / nginx / sites-available вы должны создать файл для своего сайта.Мы назовем его foobar.conf:
upstream rails {
server unix:/tmp/.sock fail_timeout=0;
server 127.0.0.1:8080 fail_timeout=0;
}
server {
listen 80 default deferred;
server_name foobar.com
access_log /var/log/nginx/rails.access.log main;
# foobar is your project. current is a symlink setup by capistrano
root /home/username/rails/foobar/current/public;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://rails;
}
location ~ ^/assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
error_page 500 502 503 504 /500.html
location = /500.html
root /home/username/rails/foobar/current/public;
}
}
Затем вы должны создать символическую ссылку из файла, который вы только что создали в / etc / nginx / sites-available, и сделать так, чтобы символическая ссылка указывала на / etc / nginx/ сайты с поддержкой / Foobar