我的 sinatra 应用程序包含在 gem 中。这意味着资产(css/js)存在于 gem 中。此应用程序即时写入生成的图像并提供服务;目前正在写入公共目录并从公共目录提供服务。
我更喜欢不在 gem 目录中写入生成的图像,而是在实现此 gem 的 Web 应用程序下的某种“缓存”目录中。
Gem 安装在/var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0
,因此资产位于 例如/var/www/TE/shared/gems/ruby/1.8/gems/tubemp-0.6.0/lib/public/css/
。
Gem 部署在一个简单的 rack-app 中/var/www/TE/current/
,所以我更愿意从/var/www/TE/current/public
.
但是,自定义公共目录的设置只允许设置一个目录:
set :public_folder, File.join(Dir.pwd, "public")
中断资产服务;Dir.pwd 是 Rack 应用程序的目录。Public 现在是 Rack-app 下的目录,但这不是资产所在的位置:它们位于 gem 中的“public”下。
set :public_folder, File.join(gemdir, "public")
中断生成的缩略图的服务。
我可以重写应用程序,使其通过 Sinatra 为资产或缩略图提供服务,但这似乎有些开销。
这是唯一的方法吗?或者有没有办法给 Sinatra 两个或更多公共目录来提供其静态项目?