【问题标题】:Adding a rails herokuapp to a subpage of an existing page domain将 rails herokuapp 添加到现有页面域的子页面
【发布时间】:2016-08-17 21:59:55
【问题描述】:

我正在为客户创建一个 Rails 登录页面,他希望该应用成为他网站的子页面。

app.herokuapp.com website.com/app

如何配置域,以便当用户键入 website.com/app app.herokuapp.com 反而出现了?

编辑。 观察。客户网站很大,在 domain.com 上安装的 WordPress 上运行

我是 Rails 和域服务的新手,如果这个问题太简单了,请见谅。

【问题讨论】:

    标签: ruby-on-rails heroku dns


    【解决方案1】:

    Heroku 必须在您的域的根目录中运行 rails 应用程序。所以基本上你想要做的事情是不可能只使用 Heroku 和任何域服务。

    然而,通过将整个东西制作成一个带有命名空间的 Rails 应用程序,可以达到预期的效果。这仅在网站不需要服务器运行时才有效。即它是静态的,只有 HTML、CSS 和 JS,但没有像 Angular 或像 WordPress 这样的 CMS 框架。以下是为此需要采取的步骤的概要:

    1. 首先,为了使您的“rails 应用程序”存在于/app,您可以将所有“应用程序 相关”路由移动到一个“应用程序”命名空间。

    在你的 routes.rb 中:

    Rails.application.routes draw do
    
        namespace :app do
         # all application routes should be placed in here
        end
    
    end
    
    1. 您需要将所有与 app 相关的控制器移动到 /controllers/app

    2. 所有 应用程序 控制器都需要重命名它们的类以具有适当的命名空间。所以你需要把每一个class WhateverController < ApplicationController改成class App::WhateverController < ApplicationController

    3. 您需要将所有与应用程序相关的视图移动到/views/app

    4. 这一步有点棘手。只有在 websiteapplication 之间的资产(css、javascript)不同时才需要。您需要创建 app.js、website.js、app.css、website.css,它们将分别位于 /assets/javascripts/assets/stylesheets 中。您还需要在/assets/stylesheetsassets/javascripts 中创建“网站”和“应用程序”文件夹。将所有 application 相关资产移动到相应的 /javascripts/app/stylesheets/app 文件夹。

    添加以下代码: 到 app.js:

    //= require_tree ./app
    

    到 app.css:

    *= require_tree ./app
    

    将您的 application.html.erb 布局的资产链接更改为:

    <%= stylesheet_link_tag 'app', media: 'all' %>
    <%= javascript_include_tag 'app' %>
    

    上面的代码告诉布局去寻找 app.js 和 app.css 并包含他们需要的东西。他们需要的是您在不同资产文件夹中的 `/app/ 文件夹中的所有内容。

    如果您推送/部署到 Heroku,应用程序应该位于 website.com/app 中(前提是您已将“website.com”正确指向 Heroku。请参阅 Reference)。

    下一批步骤是让网站在根命名空间中的 rails 应用程序中运行。

    1. 将所有必需的网站资产(html、css、javascript)移至资产文件夹中相应的/javascripts/website/stylesheets/websites 文件夹。

    添加以下代码: 到website.js:

    //= require_tree ./website
    

    到 app.css:

    *= require_tree ./website
    

    创建一个新布局 (website.html.erb)。它应该看起来与 application.html.erb 非常相似,除了:

    <%= stylesheet_link_tag 'website', media: 'all' %>
    <%= javascript_include_tag 'website' %>
    
    1. 现在您可以在 /controllers 中创建将管理网站页面 (WebsiteController) 的控制器。

      class WebsiteController < ApplicationController
      
          layout 'website' #we need to tell it which layout to use
      
          def homepage
          end
      
          def about
          end
      
          #basically just create methods/actions for every page on the website
      end
      
    2. 对于每个动作,在/views/website 中创建一个对应的视图。例如主页视图应该是 homepage.html.erb。还将网站中的 HTML 复制并粘贴到正确的 .html.erb 文件中。

    3. 将这一切与路线联系起来。

      root 'website#hompepage'
      get '/about' => 'website#about'
      get '/contact' => 'about#contact'
      
      #and so on...
      
      namespace :app do
       # all application routes should be placed in here
      end
      
    4. 最后确保遍历所有标记以替换所有link_to 路径和src 的img 标签。甚至 app 的路径也需要更改,因为所有路由都已更改。

    另一种选择是使用 high voltage gem 将静态网站 html 添加到您的 Rails 应用程序中。

    【讨论】:

    • 将网站添加到Public文件夹然后配置路由以获取/app作为index#index不是更容易吗?
    • 另外,我的问题是他们的网站在 domain.com 中作为 WordPress 运行,所以我想我不能只在 heroku 中安装整个 WordPress 网站。它不适用于您的答案,因为他们可以在 WordPress 上创建新帖子。所以我不能那样做。非常感谢您的回答。它可能有助于其他情况。
    • @Allan 你不能 root_to 一个公共的 html 文件,你仍然需要创建一个控制器。
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2015-04-24
    • 2016-04-20
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多