1

そのため、クライアント用にいくつかの異なるマイクロサイトをホストするアプリで作業しているsinatraアプリがあります。public および views ディレクトリを構造化する方法は次のとおりです。

sites/
  site1/
    public/
      style.css
    views/
      layout.haml
      general.haml
  site2/
    public/
      style.css
    views/
      layout.haml
      general.haml

リクエストが来ると、次の 2 行が表示されます。

set :views, Proc.new { File.join(root, "sites/#{site}/views") }
set :public, Proc.new { File.join(root, "sites/#{site}/public") }

着信要求が着信し、サイトが「site1」として定義されると、ビューは適切なフォルダーからレンダリングされて、希望どおりに機能します。ただし、「/style.css」ルートを呼び出すと、404 エラーが返されます。

アプリのルートにパブリック ディレクトリを作成し、そこに style.css を配置すると、正常に動作します。ただし、これはサイトごとに機能する必要があります。Sinatraの公式ドキュメントから外れますが、設定してもまだ機能しません

enable :static

または私が使用する場合

set :static, true

ドキュメントに記載されているとおりです。何か案は?

4

1 に答える 1

0

これは、設定方法に関係していると思いますsitesiteあなたが求めていることを正しく理解していれば、静的設定ではなくアプリケーションでメソッドを作成したいと思うでしょう。この例はそれを行い、期待どおりに機能しました:

class Test < Sinatra::Base
  set :public, Proc.new { File.join(site, "public") }
  set :static, true

  register do
    def site
      ["x", "y", "z"][rand * 3]
    end
  end

  get "/" do
    settings.public
  end
end

ただし、Sinatra がこの方法で静的ファイルを提供するように設計されているかどうかはわかりません。いずれにせよ、より良い解決策があるかもしれません。たとえば、Sinatra に静的ファイルを提供させる必要性をまったく回避して、Nginx または Apache でこれを完全に実行できる場合があります。

于 2011-04-02T09:14:55.017 に答える