【问题标题】:Use Rack::Static to mount a directory outside of the project directory使用 Rack::Static 在项目目录之外挂载一个目录
【发布时间】:2020-01-26 22:43:21
【问题描述】:

我正在构建一个 Rails 引擎,其中包含一些通过 Webpacker 构建的资产,我正在关注 the Webpacker documentation

我想将此引擎作为 gem 分发,并通过主机应用程序中的 Rack::Static 中间件直接从引擎的 gem 提供引擎的资产。

这就是我正在尝试的:

# in the engine project: lib/my_engine/engine.rb
module MyEngine
  class Engine < ::Rails::Engine
    (...)
    config.app_middleware.use(
      Rack::Static,
      urls: ['/myengine'], root: File.join(__dir__, 'public')
    )
  end
end

如果我将 Rack::Staticroot: 选项设置为相对路径(例如:my_engine/public),然后在宿主项目中创建指向 gem 中相关目录的符号链接,这将起作用,但是代码上面生成绝对路径的方法不行。

我能做些什么来解决这个问题?

【问题讨论】:

  • 你有没有在这方面破土动工?我遇到了一个相关的问题,我有一个Rack::Static 包装器,我将它作为mount Rerackt::UI.new, at: "/rerackt" 安装在我的路由中,其中Rerackt::UI 将绝对根传递给Rack::Static。如果我将它安装在"/",这实际上是有效的,但是当我将它安装在"/rerackt" 时,链接到index.html 的资产是,例如/static/...chunk.js 当他们需要/rerackt/static/...chunk.js

标签: ruby-on-rails ruby rack rails-engines webpacker


【解决方案1】:

root: MyEngine::Engine.root.join("public")

【讨论】:

  • 欢迎来到 SO。请详细说明您的回答将如何解决问题。
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 2013-01-12
  • 2020-09-17
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多