gpt4 book ai didi

sinatra - 在 Sinatra 中使用多个公共(public)目录

转载 作者:行者123 更新时间:2023-12-02 10:19:01 25 4
gpt4 key购买 nike

我的 sinatra 应用程序包含在 gem 中。这意味着资源 (css/js) 存在于 gem 中。该应用程序即时写入生成的图像并为其提供服务;目前正在向公共(public)目录写入并提供服务。

我不喜欢将生成的图像写入 gem 目录,而是写入实现此 gem 的 Web 应用程序下的某种“缓存”目录。

Gem 安装在 /var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0,因此 Assets 位于例如/var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0/lib/public/css/

Gem 部署在 /var/www/TE/current/ 的简单机架应用程序中,因此我更愿意从 /var/www/TE 编写并提供缩略图/当前/公共(public)

但是,自定义公共(public)目录的设置只允许设置一个目录:

set :public_folder, File.join(Dir.pwd, "public")

破坏 Assets 的服务; Dir.pwd 是 Rack 应用程序的目录。 Public 现在是 Rack-app 下的目录,但这不是找到 Assets 的地方:它们位于 gem 中的“public”下。

set :public_folder, File.join(gemdir, "public")

中断生成的缩略图的服务。

我可以重写应用程序,以便它通过 Sinatra 提供资源或缩略图,但这似乎是相当大的开销。

这是唯一的方法吗?或者有没有办法给 Sinatra 两个或更多公共(public)目录 serve its static items来自?

最佳答案

我认为可能有几个选项,但以下是我如何让一个小应用程序从两个位置(扩展程序和主应用程序的公共(public)文件夹)提供静态文件:

目录布局

root/
app.rb
public/images/foo.jpg
lib/sinatra/
gemapp.rb
gemapp/public/images/bar.jpg

扩展程序

# lib/sinatra/gemapp.rb
module Sinatra
module GemApp
def self.registered(app)

app.set :gem_images, File.expand_path( "gemapp/public/images", File.dirname(__FILE__))

app.get "/images/:file" do |file|
send_file File.join( settings.gem_images, file)
end

app.get "/gemapp" do
"running"
end
end
end
register GemApp
end

主应用

require 'sinatra'

require_relative "./lib/sinatra/gemapp.rb"

get "/" do
"home"
end

它为我提供了很好的文件服务。

关于sinatra - 在 Sinatra 中使用多个公共(public)目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16315978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com