问题描述
我正在尝试开发一个在 Rails 应用程序中使用的 gem,其中包括在安装位置提供静态文件(html、js 和 css)。使用 gem 的 UI 将通过将以下内容添加到 config/routes.rb
mount MyGem::UI.new,at: "/foo"
我几乎可以使用 Rack::Static
进行此操作,但如果有更好的解决方案,我不会附上此解决方案。
module MyGem
module_function
def root
@root ||= Pathname(__dir__).expand_path
end
end
module MyGem
class UI
def call(env)
static_app.call(env)
end
def static_app
Rack::Static.new(nil,static_options)
end
def static_options
{urls: [""],root: asset_path,index: 'index.html'}
end
def asset_path
@root ||= MyGem.root.join("assets")
end
end
end
MyGem.root
/assets 中的文件可以简化为单个 html 文件,使用 href="./index.css"
链接到同一位置的单个 css 文件。 (实际上,它们将是一个使用 homepage: "./"
in package.json
using create-react-app 构建的 React 应用程序,以生成所有资产的 ./
相关链接。)我已经使用虚拟和完整的 React 应用程序测试了此设置。
此设置有效当且仅当我使用尾部斜杠转到 localhost:3000/foo/
。但是,如果我导航到 localhost:3000/foo
而没有尾部斜杠,我会成功获得 index.html
页面,但其所有链接都已损坏,返回 404 not found:
GET http://localhost:3000/index.css net::ERR_ABORTED 404(未找到)
如何避免这种情况并在安装位置“/foo”上稳健地服务器我的静态内容?作为飞行员,只需要尾部斜杠就可以接受一半,但留在已发布的宝石中有点狡猾。
我愿意接受涉及替代 rails 路线配置、提供静态内容的不同方式(取决于是否容易被 gem 用户描述)以及构建静态内容的不同方式以及其他任何内容的解决方案。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)