我想在名为 client 的父目录中使用不同的 public 文件夹,其中包含整个AngularJS应用程序。基本上我想告诉Rails加载AngularJS应用程序,Rails唯一要做的就是提供JSON。
Ruby on Rails有可能吗?
答案 0 :(得分:6)
正如其他人所提到的,覆盖现有paths['public']
文件夹可能是也可能不是一个好主意。但是你可以在application.rb
:
Rails.application.config.middleware.insert_after(
ActionDispatch::Static,
ActionDispatch::Static,
Rails.root.join("client").to_s,
Rails.application.config.static_cache_control
)
public
文件夹is exposed to the web server through the Rack middleware ActionDispatch::Static
。关于它没有什么特别之处,上面的代码只是添加了另一个指向目录client
的中间件实例。因此,在上述情况下,浏览器可以访问public
以及client
中的所有内容。
答案 1 :(得分:1)
我认为覆盖现有的public
文件夹是个好主意,因为存在一些依赖关系。通常,rails应用程序在Webrick服务器中运行,但是在生产环境中,如果您希望在Apache Web服务器中运行应用程序,那么您将面临问题。因为Apache使用Passenger模块运行Rails应用程序。 Apache只接受/考虑将public
文件夹作为您的Web根目录。希望你有我的想法。
答案 2 :(得分:1)
只需自己为Angular应用程序做这件事。
将它放在你的application.rb中:
config.serve_static_files = true
paths['public'] = File.join 'client', 'app'
或者如果您仍然使用资产管道(config.assets.enabled = true
):
paths['public/javascripts'] = File.join 'client', 'app', 'scripts'
paths['public/stylesheets'] = File.join 'client', 'app', 'styles'
知道第二位是否有任何后果会很有趣,因为我的前端完全分开服务,因此我保持资产管道关闭并使用grunt代替。
答案 3 :(得分:0)
您可以定义另一条路径,例如
# config/application.rb
paths['my_website'] = 'website'
然后您可以在路线中使用此路径,例如
# routes.rb
get '/my_website', to: redirect('my_website/index.html')