3

私はたくさんのGoogle検索をしましたが、私のサイトをec2にデプロイする方法はまだ見つかりません。 誰でも私にec2についてもっと説明できますか?私は開発のためにUbuntu11.04を使用しています。 私は乗客+ nginxを使用して配備しています。ありがとうAmazon Ec2へのレール3.1アプリケーションのデプロイ

+0

http://www.heroku.com/ ec2にデプロイしますが、herokuのミドルウェアをプレミアムに使用します。彼らは無料の層と多くの便利なサービスを持っています – Hortinstein

+0

AWSの無料のティアの使い方を利用しようとしているので、herokuは当面私の選択肢ではありません... AWSにレールを展開するのは非常に難しいですか? EC2への配備 –

+0

は他のサーバへの配備と同じです。 – NARKOZ

答えて

7

私はcapistranoを使ってRails 3.1アプリをEC2マイクロインスタンスに配備しています。私はrvmを使って自分のEC2にRubyをセットアップしました。私は薄いものを使ってきましたが、今週末、私はUnicornに切り替えてテストしました。私は自分がやっていることを分かち合い、それに応じて旅客を使う方法を考え出すことができます。私は専門家ではないので、人々がこれについて何らかの提案をしているなら、どんなコメントも歓迎します。 :)

私は配備の "rake assets:precompile"段階でまだ問題があることを指摘したいと思います。それは第3段階の資産、すなわちプリコンパイル:nodigestになり、終了コードなしで失敗します。私はだと思います。メモリが不足している可能性があります。それは展開をロールバックしていません。私が「rake assets:precompile:nodigest」を実行すると、それが完了して完了し、すべてがうまくいく。これは、EC2マイクロインスタンスにデプロイするときにのみテスト用にVMにデプロイするときには発生しません(これは、EC2マイクロが小さいため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の/サイト利用可能で作成したファイルからシンボリックリンクを作成し、/ etc/nginxの/サイトへのシンボリックリンクのポイントを作る必要があります-enabled/foobar

関連する問題