3

さまざまなクライアントで使用される Sinatra アプリがあります。クライアントの会社のロゴと各クライアントのカスタム layout.erb を表示したいと考えています。

コードベースは基本的に誰にとっても同じです。必要なのは、'Public' ディレクトリと 'layout.erb' で異なるファイル セットを簡単に維持する方法と、リモート サーバーに展開するときに、特定のクライアントのファイルのみを自動的にコピーする方法だけです。

4

3 に答える 3

3

考えられる方法の 1 つは、クライアントごとにviewandpublicディレクトリを作成し、要求ごとに適切な:viewsandオプションを設定することです。:public

get '/:client/...' do
  set :views, File.dirname(__FILE__) + "/views/#{params[:client]}"
  set :public, File.dirname(__FILE__) + "/public/#{params[:client]}"

  # Your code
end

コメントに基づいて編集:

configブロック中にパブリック フォルダーを設定します。ここで、各クライアントのパブリック フォルダーに 1 つのサブフォルダーを追加します。特定のファイルにアクセスするために必要なのは、ビューを変更して/#{params[:client]}/logo.png代わりに取得することだけです/logo.png

于 2009-11-24T15:59:22.033 に答える
1

この問題を解決する方法を見つけました。パブリック フォルダー内のファイルへのルートを再定義することができます。実際、Sinatra は最初に「get」リクエストに対応するルートがあるかどうかをチェックし、ルートがない場合は静的コンテンツの「public」フォルダに移動します。したがって、必要なクライアント固有のファイルには、「/client/logo.gif」のような特定のパスを使用します。そのようなファイルのルートを作成し、そこにカスタム ロジックを適用しました。

get '/client/logo.gif' do
  #custom logic..
  redirect "#{where_client_files_are}/logo.gif"
end
于 2009-11-24T06:03:57.707 に答える
0

以下のコードをruby​​/sinatraファイルに追加できます

例 : イメージを作成します。プロジェクトの下とコードの下の style および scripts ディレクトリ

get '/project1/images/:file' do
  send_file('/home/sulo/dev/project1/images/'+params[:file], :disposition => 'inline')
end

get '/project1/style/:file' do
  send_file('/home/sulo/dev/project1/style/'+params[:file], :disposition => 'inline')
end

get '/project1/scripts/:file' do
  send_file('/home/sulo/dev/project1/scripts/'+params[:file], :disposition => 'inline')
end
于 2014-04-06T11:43:10.993 に答える