为什么我需要在进行更改时再次运行我的sinatra应用程序而我的环境不是:开发?

时间:2011-08-07 19:08:22

标签: ruby sinatra haml sass compass-sass

我刚刚为我的Sinatra应用程序实现了Compass配置,但当我将环境更改为:test:production并修改我的文件时,如screen.sassindex.haml我的更改不是当我重新加载页面时反映出来,所以我需要再次运行我的应用程序?

这是正常的吗?只是我吗?

这是我的app.rb文件的样子:

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

configure 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

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

通常,如果对正在运行的Sinatra应用程序进行更改,则必须重新启动应用程序,因为该程序已加载到内存中。

可以选择在Sinatra FAQ上自动检测更改并重新启动应用程序。

答案 1 :(得分:0)

由于Shotgun部分修复了这个问题(为你的生产重新加载文件,也许尝试使用Sinatra :: Reloader,恕我直言,比Shotgun更好。

也许像(未经测试)

require "sinatra"

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

话虽如此,您确定在生产/测试环境中确实需要这种行为来进行更新吗?发展环境应该(至少,我用它)用于这种热测试。

答案 2 :(得分:0)

我曾经使用过sinatra :: reloader 但是我不喜欢所引起的巨大依赖(因为我们都应该注意有多少宝石被激活)

手枪(在0.0.2的年龄),我认为所需的工作很好

答案 3 :(得分:0)

我为此使用了shotgum gem。

gem install shotgun

然后

shotgun app.rb  

来自app dir

然后根据请求重新加载应用程序,而不是将整个内容保存在内存中。您访问localhost:9393

上的站点