Soru Sinatra sinek ortamında ortamları konfigüre etmek


Biraz Sinatra uygulaması yazdım ve başarıyla başarılı bir şekilde kahramana kurdum.

Ancak, bu uygulamayı yerel bilgisayarımdaki geliştirme modunda çalıştırmak istiyorum ve bunu uzaktan depoya bastığımda, üretim modunu heroku'da kullanmak istiyorum.

Şu anda thos seçeneklerinden birini elde edebilirim. Config.ru'mı aşağıdaki değerlere değiştirdiğimde:

require 'rubygems'
require 'sinatra'
require 'sinatra/reloader'
require "./calc.rb"

enable :logging
set :environment, :development
set :port, 4567

Yerel olarak (4567 numaralı bağlantı noktasında) üzerinden çalıştırabiliyorum ruby config.ru. Config.ru'yı değiştirdiğimde:

require 'rubygems'
require 'sinatra'
require 'sinatra/reloader'
require "./calc.rb"

enable :logging
set :environment, :production
set :port, 4567
run Sinatra::Application

Ben Heroku (port 80) üzerinde çalıştırmak için elde edemiyorum.

Fakat aynı konfigürasyonu hem geliştirme hem de üretim için kullanamıyorum.

Ben şöyle bir şey isterim:

ruby config.ru dev gelişim için ve ruby config.ru prodüksiyon için.

Ek bilgi:

Yerel makinemde üretim config.ru dosyasını çalıştırmaya çalıştığımda şunu elde ederim:

$ ruby config.ru
(eval):2:in `method_missing': undefined method `run' for main:Object (NoMethodError)
        from (eval):4:in `__send__'
        from (eval):4:in `method_missing'
        from config.ru:10

18
2018-04-29 12:33


Menşei




Cevaplar:


C:\>type tmp.ru
require 'sinatra'
configure(:production){  p "I'm production" }
configure(:development){ p "I'mma dev mode" }
configure(:sassycustom){ p "I'mma own mode" }
exit!

C:\>rackup tmp.ru
"I'mma dev mode"

C:\>rackup -E development tmp.ru
"I'mma dev mode"

C:\>rackup -E production tmp.ru
"I'm production"

C:\>rackup -E sassycustom tmp.ru
"I'mma own mode"

C:\>rackup -E notdefined tmp.ru

Bir ortam belirtmezseniz, development varsayılan olarak kullanılır. İstediğiniz ortam adını belirtebilirsiniz, ancak 'üretim' çok yaygındır. Yapılandırmamış bir ortam belirtirseniz, yapılandırma bloğu eşleşmez. (Bu sizin tarafınızdan bir hata olabilir, ancak bu kod tarafından yakalanan bir hata değildir.)

Sinatra belgelerinin şunları söylediğine dikkat edin RACK_ENV ortam değişkeninin ayarlanması eğer mevcutsa kullanılabilir. Bu işe yaramadı, ama son bir kaç yılda bir kez düzeltildi!

Örneğin, servisiniz için bir ortam değişkeni ayarlayabilirseniz, modu kontrol edebilirsiniz.


21
2018-04-29 15:27



RACK_ENV olayı sadece pencereler değil, aynı şey benim için de geçerli. İlginçtir ki bir bunun için düzelt geçen sene rafa çıktı ama gemiye girmemiş. Raf, RACK_ENV ile belirttiğiniz her şeye ayarlanır -E ve 'gelişme' ve 'sinatra' varsayılanları bunu görmeli. - matt


Ayrıca kapmak ENV['RACK_ENV'] config.ru adresinden ve uygulamanızı farklı şekilde yapılandırarak kullanın. Heroku üzerinde meli varsayılan olarak üretimde çalıştırın ve eğer rackup Sunucunuzu açmak için varsayılan olarak geliştirme olacaktır. İşte her iki ortamda da aynı yapılandırma dosyasına sahip uygulamalardan birinden bazı örnek kodlar:

#\ -p 4567
require 'bundler'               # gem requires
Bundler.require(:default, ENV['RACK_ENV'].to_sym)  # only loads environment specific gems
if ENV['RACK_ENV'] == 'production'           # production config / requires
  require './lib/middleware/exceptionmailer'

  use Rack::ExceptionMailer, 
    :to => ['me@example.com'],
    :from => 'service@example.com',
    :subject => 'Error Occurred on Rack Application'

else                            # development or testing only
  use Rack::ShowExceptions
end

Bu şekilde, İnce veya Yolcu ya da her ne alırsa alsın ve doğru modüller üretimde yüklenecek, ancak geliştirme için başka yapılandırmalar da yapabilirsiniz.


5
2018-05-13 23:27





Heroku belgelerine bakın:

http://devcenter.heroku.com/articles/rack#frameworks

Temelde uyguladığım için kullandığım şey, yerel olarak başladığımda 4567 numaralı bağlantı noktasından geçiyor.


-1
2018-04-29 13:05



Yerel makinemde başka bir şeye ihtiyacım var, çünkü config.ru'da Sinatra :: Application komutunu çalıştıramıyorum (yukarıda belirtilen hata atılıyor) - leifg