开发者

Why do I need to run my sinatra app again when making changes and my environment is not :development?

I just implemented Compass configuration for my Sinatra app but when I change the environment to :test or :production and modify my files like screen.sass or index.haml my changes are not reflected when I reload the page so I need to run my app again?

Is it normal? Is is just me?

This is how my app.rb file looks like:

require 'sinatra'
require 'haml'
require 'sass'
require 'compass'
require './helpers.rb'

configure开发者_Python百科 do
  set :environment, :test

  Compass.configuration do |config|
    settings.environment == :production ? 
      config.output_style = :compressed : 
      config.output_style = :nested
    settings.environment == :development ?
      config.line_comments = true :
      config.line_comments = false
  end

  set :sass, Compass.sass_engine_options
end

before do
  @js = 'javascript:;'
end

get '/scripts/jquery.js' do
  # Downloads the latest jQuery 1.x version when needed. Requires to reload the page after done.
  `curl "https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" >> public/scripts/jquery.js`
end

get '/styles/:name.css' do
  sass :"styles/#{params[:name]}"
end

get '/?' do
  haml :index
end

get '/:page/?' do
  haml params[:page].to_sym
end

Any idea?


Generally, if you make a change to a running Sinatra application, you have to restart the application, as the program has already been loaded to memory.

There are options for automatically detecting changes and restarting the application on the Sinatra FAQ.


Since Shotgun fix the issue partially (reloading the files for your at production, maybe try with Sinatra::Reloader which, IMHO, works better than Shotgun.

Maybe something like (not tested)

require "sinatra"

configure(:production) do |c|
  require "sinatra/reloader"
  c.also_reload "*.sass", "*.haml"
end

That being said, are you sure you do need this kind of behavior on a production/test environment for updating? Development env. should be (at least, for what I use it for) for this kind of hot testing.


I used to use sinatra::reloader but I didn't like the huge dependencies incurred (as should we all be mindful how many gems get activated)

pistol ( at a tender age of ver 0.0.2) and I think does the required job nicely


I use shotgum gem for this.

gem install shotgun

then

shotgun app.rb  

from within the app dir

this then reloads the app per request, rather than holding the whole thing in memory. you access the site on localhost:9393

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜