2014-10-03 17 views
5

ile başlatın Başka bir Rails uygulaması için Updater görevi gören bir Rails uygulaması üzerinde çalışıyorum.Başka bir Rails Sunucusunu, Rails Uygulaması içinden backticks

ben güncelleme işlemi çalışma var,

  • Eşitleme Varlıklar
  • Paketi ile
  • precompile Varlıklar
  • Başlangıç ​​sunucusunu yüklemek doğru yere
  • için yeni sürüm Zip
  • Extract indir - demet yürütme rayları sunucusu

Son adımla ilgili bir sorun yaşıyorum.

Ben çalıştırdığınızda: Bu güncelleştiriciler dan çekiyor gibi görünen güncelleyici uygulamasından

Dir.chdir('../other-project') 
`bundle exec rails server -d -p 3000` 

değil ondan çekerek edilmelidir yeni uygulama paket paket.

güncelleyici Raylar 4'te yazılı ve aşağıdaki alıyorum sunucuyu başlatmaya çalıştığınızda bu güncelleme olduğu uygulama raylar 3.

bulunmaktadır: anlarım Bu çıktıda

/home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/railtie/configuration.rb:95:in `method_missing': undefined method `handlebars' for #<Rails::Application::Configuration:0x007f9de18de100> (NoMethodError) 
    from /home/vagrant/apps/other-project/config/application.rb:22:in `<class:Application>' 
    from /home/vagrant/apps/other-project>' 
    from /home/vagrant/apps/other-project/config/application.rb:13:in `<top (required)>' 
    from /home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:79:in `require' 
    from /home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:79:in `block in server' 
    from /home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:76:in `tap' 
    from /home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:76:in `server' 
    from /home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:40:in `run_command!' 
    from /home/vagrant/.rbenv/versions/2.0.0-p481/lib/ruby/gems/2.0.0/gems/railties-4.1.4/lib/rails/commands.rb:17:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

Hatalı sürümlerin yanlış sürümünü kullanmaya çalışıyorum, cd ../other-project ve bundle exec rails server -d -p 3000 el ile çalışırken, iyi çalışıyor.

Bunu yapmak için kullanabileceğim herhangi bir hileler var mı? Temel kutu Ubuntu 14.04

Teşekkür ederiz!

+0

Bu prosedür görevi için neden tüm ray sistemini kullanın? Bunu bir bash betiği ile yapmış olabilirsiniz – kendotwill

+0

@kendotwill Bu uygulamanın amacı gömülü raylar uygulaması için bir ön uç updater/denetleyici sağlamaktır. Bu rayların her ikisi de vagrant bir kutuda çalışır. Bir bash betiği işe yaradı, ancak kullanıcılar talep üzerine güncelleme yapamayacaktı. –

cevap

6

Pekala, bu sorunu gidermek için sabahları harcadım ve bir çözüm buldum!

önce BUNDLE_GEMFILE ortam değişkeni ayarlanır yapmanız gereken:

bundle exec rails server -d -p 3000

O Bundler ben içinde başka bir uygulamayı başlatmak için çalışıyorum beri projeleri Gemfile bulmakta biraz yardıma ihtiyacı görünüyor Mevcut paket, bu güncellemenin güncellenmesinden sorumlu olacak uygulamayı kontrol etmek için oluşturduğum sınıf.

Başlatma yönteminin beklendiği gibi çalıştığını söylemekten mutluluk duyuyorum!

class AppController 
    @dir = Rails.root.join('../', 'Other-app/') 

    def self.running? 
    File.exist?("#{@dir}/tmp/pids/server.pid") 
    end 

    def self.start 
    if running? 
     puts "app already running" 
    else 
     Dir.chdir(@dir) 
     puts "starting app..." 
     `BUNDLE_GEMFILE=Gemfile bundle exec rails server -d -p 3000` 
     puts "app started" 
    end 
    end 

    def self.kill 
    if not running? 
     puts "app already dead" 
    else 
     Dir.chdir(@dir) 

     puts "killing app..." 
     `kill $(cat tmp/pids/server.pid)` 
     puts "app dead" 
    end 
    end 

    def self.restart 
    if running? 
     kill 
     start 
    else 
     start 
    end 
    end 
end 
+2

Ayrıca Bundler.with_clean_env'i ilginizi çekebilir –

+0

@FrederickCheung Bunu beğendim, çözümümden daha temiz görünüyor –

0

Haklısınız Mike !!

Sadece set demek olacaktır portu: İki farklı sunucu örneği için

bundle exec rails s -p 3001

bundle exec rails s -p 3000

!

Şerefe!