3

我有一个可供不同客户使用的 Sinatra 应用程序。我希望为每个客户显示客户的公司徽标和自定义 layout.erb。

每个人的代码库基本相同。我所需要的只是一种在“Public”目录和“layout.erb”中轻松维护不同文件集的方法,并且在部署到远程服务器时,仅自动复制特定客户端的文件。

4

3 回答 3

3

一种可能的方法是为每个客户端设置一个目录,view并为每个请求public设置适当的:views和选项:public

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

  # Your code
end

根据评论编辑:

config在阻止期间设置您的公用文件夹。现在为每个客户端添加一个子文件夹到您的公用文件夹。访问特定文件所需要做的就是修改视图以获取/#{params[:client]}/logo.png而不是/logo.png

于 2009-11-24T15:59:22.033 回答
1

刚刚找到了解决这个问题的方法。可以重新定义公用文件夹中文件的路由。事实上,Sinatra 首先检查“get”请求是否有对应的路由,如果没有,它会转到“public”文件夹获取静态内容。因此,对于我需要的任何特定于客户端的文件,我使用特定路径,例如“/client/logo.gif”类型的 URL。我为这些文件创建了一个路由,并在那里应用了我的自定义逻辑:

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

您可以将以下代码添加到您的ruby​​/sinatra文件中

示例:创建图像。项目下的样式和脚本目录以及代码下方

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 回答