2009-05-18 12 views
0

免責事項:私は、RailsとCapistrano(しかし、中間的な.NET C#開発者)の悩みで、もっと学びたいと思っています。Capistranoを使ってRails 2.3.2アプリを上から(FastCGI用に)デプロイするには?

私はCapistrano開発プロセスのセットアップに苦労しています。ここ


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. のRails 2.3.2再起動タスクはdoesnのようにスクリプト/プロセスディレクトリを持っていませんまったく働きません。これをどうやって解決するのですか?
  2. アプリケーションがデプロイされているときにenvironment.rbのRAILS_ENV変数を "production"に設定する方法はありますか( "set:rails_env、:production"ではできません)?
  3. また、私はこれらの2つのファイルから何かが欠けていますか?私の答えを更新しました

答えて

1

ここに私のdeploy.rbがあります。これは、実際にはずっと更新されていません。 my:after_update_codeタスク内で環境を設定するために2つのsedコマンドを実行します。私はそれを行うより簡単な方法があると確信していますが、これは私の現在の方法です。

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 export $svn_path . --force 
cap deploy 

を。一度SVNからエクスポートすると、一度共有パスで私のdatabase.ymlを自動的に生成するプロンプトとして。

+0

あなたのサンプルコードは私にカピストラノの使い方を理解させる助けになりました。さまざまなシナリオのための変数とタスクを持つ標準の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. EDIT:
  3. 私deploy.rbファイルを見ると、あなたはおそらく同様のに対して、コマンドラインからスクリプトにRAILS_ENV環境変数を渡す必要があります実際には、それがわずかですあなたの仕事をdeploy.rbの代わりにCapfileに入れることは奇妙です - this thread on the Capistrano Google Groupを見ても、それは完全には怒鳴りません。あなたやあなたのチームまで、私はそう思う。

これが正しい方向に向いていますか?

+0

@Rufo:ヒントのためのthx!私は今、FastCGIを使用しています。なぜなら、mongrelインスタンスを使用するために余分なメモリを払わなければならないからです。私はちょうど今レールアプリを構築することに慣れ親しんでいるようにしようとしています。もし私がもっとしたら、mongrelを使って始めます 1)実際にはirs_process_scriptsプラグインを使ってみましたが、動作させることができませんでした。 2)どのスクリプトに渡すべきですか? 3)hmmm。基本的にはcapfileはdeploy.rbをロードするだけですか?私は今、リンクをチェックアウトします。 – gabe

関連する問題