我的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)
请帮助。
答案 0 :(得分:2)
我建议用像i18n gem这样更强大的东西替换你公认的贫民窟方式
而不是使用浏览器的语言(例如)你可以在之前的过滤器中做这样的事情
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