2

アセットをローカルでコンパイルし、rsync を使用して本番サーバーにプッシュするカスタム カピストラーノ タスクを作成しようとしています。問題は、capistrano を使用しているときにアプリ サーバーの IP アドレスにアクセスする方法がわからないことですrun_locally

ここに私のからの抜粋がありますconfig/deploy.rb

server "[some_ip_address]", :web, :app, :db, :primary => true

...

namespace :assets do
  desc 'Run the precompile task locally and rsync with shared'
  task :precompile, :roles => :web, :except => { :no_release => true } do

    run_locally "bundle exec rake assets:precompile"
    run_locally "rsync -zvrh --progress -e 'ssh -i #{ssh_options[:keys][0]}' public/assets #{user}@$CAPISTRANO:HOST$:#{shared_path}"
    puts "cleaning up locally compiled assets"
    run_locally "bundle exec rake assets:clean"
  end
end

問題は$CAPISTRANO:HOST$、IP に展開されないことです。ハードコーディングできることはわかっていますが、適切に行いたいと思います。

4

4 に答える 4

2

ホスト IP を使用して capistrano 変数を定義し、capistrano スクリプト内の任意の場所で参照して、それらを DRY に保つようにしてください。

set :host, "some IP addresss"
server host, :web, :app, :db, :primary => true

およびタスク定義で:

run_locally "... #{host} ..."
于 2012-07-17T07:41:23.447 に答える
0

SocketまたはAddrinfoで使用getaddrinfoしてみましたか?

1.9.3p125 :035 > Addrinfo::getaddrinfo('ya.ru', 'http', :INET, :STREAM)[0].ip_address
 => "93.158.134.203"
1.9.3p125 :037 > Socket::getaddrinfo('ya.ru', 'http', :INET, :STREAM)[0][3]
 => "93.158.134.3"
于 2012-07-17T07:51:06.550 に答える
0

pry gemを使用して、そのようなオプションを見つけました:

  run_locally %{bundle exec rake assets:precompile}
  roles[:web].servers.each do |web_server|
    run_locally %{rsync --recursive --times --rsh=ssh --compress --human-readable --progress public/assets #{user}@#{web_server.host}:#{shared_path}}
  end
  run_locally %{bundle exec rake assets:clean}

PS。私は同じことをしようとしていて、この質問を見つけました:)

もう 1 つのオプションは、turbo-sprockets-rails3 gem です。

于 2013-04-07T21:54:06.247 に答える
0

残念ながら、 にrun_locallyは と同じ文字列置換がないためrun、機能しません$CAPISTRANO:HOST$

アセットをプリコンパイルするだけの場合は、次の行を に追加できますdeploy.rb

load 'deploy/assets'
于 2012-07-17T07:47:49.713 に答える