代码之家  ›  专栏  ›  技术社区  ›  Matthew

在Capistrano任务中获取远程IP

  •  2
  • Matthew  · 技术社区  · 12 年前

    我正在尝试编写一个自定义的capistrano任务,该任务在本地编译我的资产,然后使用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 回复  |  直到 12 年前
        1
  •  2
  •   mdominiak    12 年前

    尝试使用主机IP定义capistrano变量,并在capistranoscript中的任何位置引用它以保持其干燥:

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

    以及在您的任务定义中:

    run_locally "... #{host} ..."
    
        2
  •  0
  •   Tanzeeb Khalili    12 年前

    不幸地 run_locally 没有与相同的字符串替换 run 所以 $CAPISTRANO:HOST$ 不会起作用。

    如果您所要做的只是预先编译资产,那么您可以在 deploy.rb 以下为:

    load 'deploy/assets'
    
        3
  •  0
  •   HargrimmTheBleak    12 年前

    你试过用吗 getaddrinfo 在里面 Socket Addrinfo ?

    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"
    
        4
  •  0
  •   faron    11 年前

    使用撬动宝石,我发现了这样一个选择:

      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。我试着做同样的事情,发现了这个问题:)

    另一个选择是看涡轮-程序-等级3宝石。