2009-05-18 1 views
0

면책 조항 : 저는 Rails와 Capistrano (하지만 중급 .NET C# 개발자)의 놈입니다.Capistrano가 설치된 레일 2.3.2 앱을 맨 위부터 배포하는 방법 (FastCGI 용)?

저는 카피스트라노 개발 프로세스 설정에있어 가장 힘든 시간을 보냈습니다. 여기


set :application, "MyAppName" 
set :domain, "domainname" 
set :user, "userid" 
set :repository, "svn+ssh://#{user}@#{domain}/home/#{user}/svn/#{application}/trunk" 
set :rails_env, :production 
set :chmod755, %w(app config db lib public vendor script tmp public/dispatch.cgi public/dispatch.fcgi public/dispatch.rb) 
set :deploy_to, "/home/#{user}/apps/#{application}" 
set :use_sudo, false 
set :deploy_via, :checkout 
set :group_writable, false 
default_run_options[:pty] = true 
role :app, domain 
role :web, domain 
role :db, domain, :primary => true 

내 Capfile 것 : 여기 난 내 deploy.rb에 대한 지금까지이 무엇


load 'deploy' if respond_to?(:namespace) # cap2 differentiator 
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) } 
load 'config/deploy' 

namespace :deploy do 

    task :restart, :roles => :app do 
    run "#{current_path}/script/process/reaper --dispatcher=dispatch.fcgi" 
    end 

    desc "Set the proper permissions for directories and files on HostingRails accounts" 
    task :after_deploy do 
    run(chmod755.collect do |item| 
     "chmod 755 #{current_path}/#{item}" 
    end.join(" && ")) 
    end 

end 
  1. 레일 2.3.2 재시작 작업 아무튼 그래서 스크립트/프로세스 디렉토리가 없습니다 전혀 일하지 않아. 이 문제를 어떻게 해결할 수 있습니까?
  2. 응용 프로그램을 배포 할 때 environment.rb의 RAILS_ENV 변수를 "production"으로 설정하는 방법이 있습니까 ("set : rails_env, : production")?
  3. 또한이 두 파일의 내용이 누락 되었습니까? 내 대답을 업데이트

답변

1

여기 내 deploy.rb가 있는데, 실제로 오랜 시간 업데이트되지 않았습니다. my : after_update_code 작업 내에서 환경을 설정하기 위해 두 개의 sed 명령을 실행합니다. 확신할만한 방법이 있지만 이것이 현재의 나의 방법입니다. 즉, 두 번 내 암호를 물어 것

svn export $svn_path . --force 
cap deploy 

: 내 변수를 설정하면

require 'erb' 

before "deploy:setup", :db 
after "deploy:update_code", "db:symlink" 
after "deploy", "deploy:cleanup" 

def prompt_with_default(var, default) 
    set(var) do 
    Capistrano::CLI.ui.ask "Enter #{var} [#{default}] : " 
    end 

    set var, default if eval("#{var.to_s}.empty?") 
end 

default_run_options[:pty] = true 

set :rake, "/usr/local/bin/rake" 

set :user, "your username" 
set :application, "application name" 
set :repository, "svn repository path" 
set :host, "domain name" 
set :db_host, "DB host name" 
set :db_user, "DB user name" 
set :db_prefix, "any DB name prefix your host might require" 
set :rails_env, "production" 

set :deploy_to, "/home/username/rails/#{host}" # your deployment directory 

role :app, host 
role :web, host 
role :db, host, :primary => true 

set :use_sudo, false 
set :checkout, "export" 

# 
# TASKS 
# 
desc "Tasks to execute after code update" 
task :after_update_code, :roles => [:app, :db, :web] do 
    # Make sure we're running in production 
    run "sed -i -e '/ENV.*RAILS_ENV/s/# //' #{release_path}/config/environment.rb" 
    run "sed -i -e '/ENV.*RAILS_ENV/s/production/#{rails_env}/' #{release_path}/config/environment.rb" 

    # Add banned IPs 
    deny_lines = [] 
    File.readlines("#{release_path}/config/banned_ips").each {|ip| 
    deny_lines << "deny from #{ip}" 
    } 

    ip_ban_block = <<EOBAN 
# Bannination 
order allow,deny 
#{deny_lines.join} 
allow from all 
EOBAN 

    run "sed -i -e 's/# BANNED IPS/#{ip_ban_block}/' #{release_path}/public/.htaccess" 

    run "chmod +x #{release_path}/script/runner" 
    run "chmod +x #{release_path}/script/process/reaper" 
    run "chmod +x #{release_path}/script/process/spawner" 
    run "chmod 755 #{release_path}/public/dispatch.*" 
end 

desc "Restarting after deployment" 
task :after_deploy, :roles => [:app, :db, :web] do 
    run "cd #{current_path} && rake RAILS_ENV=production db:sessions:clear tmp:clear" 
    # fix permissions 
    run "dos2unix #{release_path}/public/dispatch.*" 
    run "dos2unix #{release_path}/public/.htaccess" 
    run "chmod -R 755 #{release_path}" 
    run "chmod -R 775 #{release_path}/log #{release_path}/tmp #{release_path}/script" 
    run "find #{release_path}/ | xargs touch" 
    run "touch #{deploy_to}/current/public/dispatch.fcgi" 
end 

desc "Restarting after rollback" 
task :after_rollback, :roles => [:app, :db, :web] do 
    run "touch #{deploy_to}/current/public/dispatch.fcgi" 
end 

namespace :db do 
    desc "Create database yaml in shared path" 
    task :default do 
    prompt_with_default(:db_password, "") 
    db_config = ERB.new <<-EOF 
base: &base 
    adapter: mysql 
    port: 3306 
    host: #{db_host} 
    username: #{db_user} 
    password: #{db_password} 

development: 
    database: #{db_prefix}#{application}development 
    <<: *base 

test: 
    database: #{db_prefix}#{application}test 
    <<: *base 

production: 
    database: #{db_prefix}#{application}production 
    <<: *base 
EOF 

    run "mkdir -p #{shared_path}/config" 
    put db_config.result, "#{shared_path}/config/database.yml" 
    end 

    desc "Make symlink for database yaml" 
    task :symlink do 
    run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" 
    end 
end 

, 내가 실행하는 bash는 스크립트가 있습니다. 한 번은 SVN에서 내보내고 한 번은 공유 경로에서 내 database.yml을 자동으로 생성하라는 메시지로 보냅니다.

+0

예제 코드는 Capistrano 사용법을 이해하는 데 도움이되었습니다.다양한 시나리오에 대한 변수 및 작업으로 표준 deploy.rb & Capfile을 올바르게 설정하는 방법에 대한 공식 문서를 찾는 데는 매우 어려움이 있습니다. – gabe

+0

도움이 된 것을 기쁘게 생각합니다. 필자가 썼을 때, 문서의 부족은 더욱 두드러졌으며, 웹에서 찾은 조각들과 함께 자갈을 맺었다. –

+0

나는 똑같이하고있다. 곧 내 질문에 대한 업데이트로 최종 버전을 게시 할 예정입니다. – gabe

2

, # 3 참조 ...

나는 배포 FastCGI를 사용하지 않지만, 몇 가지 마음에 와서 그 : 프로세스 스크립트가 이동 한

  1. Rails 코어에서 a plugin으로 바뀌며 GitHub에서 가져올 수 있습니다.

    run #{current_path}/script/process/reaper RAILS_ENV=#{rails_env} --dispatcher=dispatch.fcgi

  2. 편집 :
  3. 내 deploy.rb 파일을 보면, 당신은 가능성이 유사한로, 명령 행을 통해 스크립트에 RAILS_ENV 환경 변수를 전달해야합니다 실제로, 약간입니다 이상하게도 deploy.rb 대신 Capfile에서 작업을 수행 할 수 있습니다. this thread on the Capistrano Google Group을 볼 수는 있지만 완전히 싫은 것은 아닙니다. 당신/당신 팀 까지요.

희망이 있으면 올바른 방향으로 인도합니다.

+0

팁 : @Rufo : thx! mongrel 인스턴스를 사용하기 위해 메모리를 추가로 지불해야하므로 FastCGI를 사용하고 있습니다. 나는 방금 익숙한 승/레일 앱을 만들려고 노력하고 있습니다. 내가 더 할 경우, 잡종을 사용하여 시작하겠습니다. 1) 실제로 irs_process_scripts 플러그인을 사용해 보았지만 작동하지 못했습니다. 2) 어떤 스크립트를 전달해야합니까? 3) 흠. Capfile은 기본적으로 deploy.rb를로드하기위한 것입니다. 나는 지금 링크를 체크 아웃 할 것이다. – gabe

관련 문제