español ruby heroku sinatra

ruby - español - heroku panel



Sinatra configurando entornos sobre la marcha. (3)

Mira la documentación de Heroku:

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

Eso es básicamente lo que uso para mi aplicación, cuando la inicio localmente se ejecuta en el puerto 4567.

He escrito con éxito una pequeña aplicación de Sinatra y ya la he implementado con éxito en heroku.

Sin embargo, quiero ejecutar esa aplicación en modo de desarrollo en mi computadora local y quiero tenerla en modo de producción en heroku una vez que la coloque en el repositorio remoto.

Actualmente puedo lograr cualquiera de estas opciones. Cuando cambio mi config.ru a los siguientes valores:

require ''rubygems'' require ''sinatra'' require ''sinatra/reloader'' require "./calc.rb" enable :logging set :environment, :development set :port, 4567

Puedo ejecutarlo localmente (en el puerto 4567) a través de ruby config.ru . Cuando cambio el config.ru a esto:

require ''rubygems'' require ''sinatra'' require ''sinatra/reloader'' require "./calc.rb" enable :logging set :environment, :production set :port, 4567 run Sinatra::Application

Puedo hacerlo funcionar en Heroku (en el puerto 80).

Pero no puedo usar la misma configuración tanto para el desarrollo como para la producción.

Me gustaría tener algo como:

ruby config.ru dev para desarrollo y ruby config.ru para producción.

Información Adicional:

Cuando intento ejecutar el archivo config.ru en mi máquina local, obtengo:

$ 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


También puede tomar ENV[''RACK_ENV''] en su config.ru y usar esa configuración de su aplicación de manera diferente. En Heroku debería ejecutarse en producción de forma predeterminada y, si se rackup para iniciar su servidor, se desarrollará de forma predeterminada. Aquí hay algunos ejemplos de código de una de mis aplicaciones que se ejecuta en ambos entornos con el mismo archivo de configuración:

#/ -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 => [''[email protected]''], :from => ''[email protected]'', :subject => ''Error Occurred on Rack Application'' else # development or testing only use Rack::ShowExceptions end

De esta manera, Thin o Passenger o lo que sea, lo recogerán y los módulos correctos se cargarán en producción, pero puede hacer otra configuración para el desarrollo.


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

Si no especifica un entorno, el development se utiliza de forma predeterminada. Puede especificar cualquier nombre de entorno que desee, aunque ''producción'' es muy común. Si especifica un entorno que no configura, ningún bloque de configuración coincidirá. (Puede que sea un error de su parte, pero no es un error detectado por el código).

Tenga en cuenta que la documentación de Sinatra dice que la configuración de la variable de entorno RACK_ENV se utilizará si está disponible . Esto solía no funcionar, pero en algún momento de los últimos años se ha solucionado.

Si, por ejemplo, puede establecer una variable de entorno para su servicio, puede controlar el modo.