0

私の Sinatra Web サイトでは、2 つの言語を切り替えるゲットーな方法を使用しています。これは、私のローカル マシンでは完全に機能しますが、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およびURLに移動するリンクをクリックすると、リンク/trに正しくリダイレ​​クトされ/homeますが、views フォルダーは変更されません。

私の宝石は両方の環境で同じバージョンです:

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

サイトへのリンク

助けてください。

4

1 に答える 1

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

そうすれば、必要なビュー テンプレートのコピーが 1 つだけになり、1 つの要素のみを変更する必要がある場合にすべてのビューを変更する複雑さが軽減されます (たとえば)。

sinatra アプリを heroku で動作するようにテストしたい場合はRACK_ENV=production、サーバーを起動する前に a をスローできます。元。RACK_ENV=production ruby my_app.rb

于 2013-03-21T10:54:49.960 に答える