设置Sinatra模板选项在本地工作,在Heroku上打破

时间:2013-03-21 09:58:26

标签: ruby heroku sinatra erb

我的Sinatra网站使用一种公认的贫民窟方式在两种语言之间切换,这种方式在我的本地机器上完美运行,但在Heroku上没有。

我的app.rb如下:

require 'sinatra'

get '/'  do
  set :erb, :views => settings.views + "/en"
  erb :index, :layout => false, :views => settings.views
end

get '/tr'  do
  set :erb, :views => settings.views + "/tr"
  redirect to('/home')
end
get '/en'  do
  set :erb, :views => settings.views + "/en"
  redirect to('/home')
end

get '/home'  do
  erb :home
end
get '/products' do
  erb :products
end
...

当我点击转到/en/tr网址的链接时,我被正确地重定向到/home链接,但视图文件夹不会更改。

我的宝石在两种环境中都是相同的版本:

rack (1.4.1)
rack-protection (1.2.0)
tilt (1.3.3)
sinatra (1.3.3)
bundler (1.3.2)

Link to the site

请帮助。

1 个答案:

答案 0 :(得分:2)

我建议用像i18n gem这样更强大的东西替换你公认的贫民窟方式

here is a tutorial

而不是使用浏览器的语言(例如)你可以在之前的过滤器中做这样的事情

before do
  case request.path_info
    when /^\/tr/ then set :locale, "tr"
    else set :locale, "en"
  end
end

和帮助者

helpers do
  def get_locale
    settings.locale
  end
  # other helpers from example
end

这样您只需要一个视图模板副本,当您只需要更改一个元素时,可以减少更改所有视图的复杂性(例如)

如果您想测试您的sinatra应用程序,就像它将在heroku上运行一样,您可以在启动服务器之前使用RACK_ENV=production。防爆。 RACK_ENV=production ruby my_app.rb