2015-03-29 12 views
5

Sto eseguendo un'applicazione standard Rails 4.2.0 su Elastic Beanstalk. Il contenitore è la scatola Amazon Linux 2014.09 v1.0.9 a 64 bit con Ruby 2.1.4, Puma 2.9.1 e Nginx 1.6.2.Elastic Beanstalk attiva a intermittenza il rack 1.5.2, ma il mio Gemfile richiede il rack 1.6.0

Quando invio il codice a questo ambiente, ottengo il seguente errore nel puma.log: "Il rack 1.5.2 è già stato attivato, ma il tuo Gemfile richiede il rack 1.6.0. ".

Non ricordo di aver visto questi errori alcuni mesi fa mentre stavo testando e sembra essere intermittente. A volte spingo e tutto funziona, altre volte spingo e fallisce.

https://forums.aws.amazon.com/thread.jspa?messageID=599675 suggerisce che potrebbe esserci un errore in /opt/elasticbeanstalk/support/conf/puma.conf, ma ho corretto il file e l'errore si verifica ancora. Ho anche fatto in modo di avere puma e rack nel mio Gemfile.

Qual è il modo più produttivo e sostenibile di ottenere le istanze EC2 per caricare la versione corretta del rack?

risposta

4

Dopo molte prove ed errori, ecco cosa ha funzionato per me.

Rimuovere puma e rack da Gemfile. Esegui bundle install. Ecco come si presenta il mio Gemfile.

# Gemfile 
source 'https://rubygems.org' 

gem 'ahoy_matey' 
gem 'aws-sdk' 
gem 'bcrypt' 
gem 'cancancan' 
gem 'coffee-rails' 
gem 'font-awesome-rails' 
gem 'foundation-rails' 
gem 'gibbon' 
gem 'jbuilder' 
gem 'jquery-infinite-pages' 
gem 'jquery-rails' 
gem 'kaminari' 
gem 'mandrill_mailer' 
gem 'modernizr-rails' 
gem 'nokogiri' 
gem 'omniauth-facebook' 
gem 'omniauth-twitter' 
gem 'owlcarousel-rails' 
gem 'paper_trail' 
gem 'pg' 
gem 'rails' 
gem 'rails_admin' 
gem 'sanitize' 
gem 'sass-rails' 
gem 'sentry-raven' 
gem 'stripe' 
gem 'twitter-typeahead-rails' 
gem 'uglifier' 
gem 'whenever' 

group :test, :development do 
    gem 'dotenv-rails' 
end 

group :development do 
    gem 'spring' 
end 

group :doc do 
    gem 'sdoc' 
end 

In .ebextensions/ cartella del pronti contro termine, creare uno script per installare cremagliera 1.6.0 come un gioiello locale.

# .ebextensions/00-install-local-gems.config: 
commands: 

    # add rack 1.6.0 to $GEM_ROOT so puma can activate it instead of rack 1.5.2 
    # use actual path not $GEM_ROOT because env vars are not available here 
    # make sure puma and rack are not in app's Gemfile or there will be blood 

    00_install_rack_160: 
    command: gem install -i /opt/rubies/ruby-2.1.4/lib/ruby/gems/2.1.0 rack -v 1.6.0  

Commit Gemfile, Gemfile.lock e .ebextensions/00-install-local-gems.config nella vostra repo. Spingi il codice su Elastic Beanstalk.

Ora è necessario terminare tutte le istanze esistenti. Elastic Beanstalk li ricreerà con questa configurazione aggiornata.

Posso confermare quanto sopra funziona con 64 bit Amazon Linux 2014.09 v1.2.0 e v1.0.9, entrambi in esecuzione Ruby 2.1 (Puma).

Problemi correlati