在Sinatra中为每条路线设置:public_folder?

时间:2013-09-24 21:57:47

标签: angularjs sinatra

我处于需要从Sinatra提供多个独立的angularjs应用程序的情况。是的,这些应该从HTTP服务器提供,但这不是一个选项。

这是我的目录设置(为了示例目的而被剥离)

/SinatraApp
|--  public
|    |--  App1
|    |    |--  scripts
|    |    |--  styles
|    |    |--  index.html
|    |--  App2
|    |    |--  scripts
|    |    |--  styles
|    |    |--  index.html
|--  app.rb

我先试过

set :public_folder, 'public'

然后分别在每个索引路径中

get '/App1' do
  send_file File.join(settings.public_folder, 'App1', 'index.html')
end
get '/App2' do
  send_file File.join(settings.public_folder, 'App2', 'index.html')
end

但这不起作用。它为index.html文件提供了良好的服务,但是资产链接到localhost / scripts而不是localhost / App1 / scripts。然后我尝试为每条路线设置:public_folder设置。没有运气。

get '/App1' do
  set :public_folder, File.join('public', 'App1')
  send_file File.join(settings.public_folder, 'index.html')
end

我收到此错误:

NoMethodError at /App1
undefined method `set' for #<Sinatra::Application:0x2548ba8>
file: app.rb location: block in <main> line: 73

我真的想避免为另一个角度应用程序生成另一个Sinatra应用程序,我真的需要这个工作。想法?

1 个答案:

答案 0 :(得分:0)

为此找到了解决方案。 Sinatra中的模块应用程序结合了config.ru文件。 http://titusd.co.uk/2010/04/07/a-beginners-sinatra-tutorial/