将rails herokuapp添加到现有页面域的子页面

时间:2016-08-17 21:59:56

标签: ruby-on-rails heroku dns

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

app.herokuapp.com website.com/app

如何配置域,以便在用户键入website.com/app时 而是显示app.herokuapp.com?

编辑。 OBS。客户端网站很大,可以在domains.com上安装的WordPress上运行

我是rails和域名服务的新手,如果这是一个基本问题,我很抱歉。

1 个答案:

答案 0 :(得分:0)

Heroku必须在您网域的根目录中运行rails应用。因此,基本上只使用Heroku和任何域名服务,您尝试做的事情都是不可能的。

然而,通过使整个东西成为rails应用程序但使用命名空间可以实现所需的结果。这仅在网站不需要运行服务器时才有效。即它只是HTML,CSS和JS的静态,但没有像WordPress这样的Angular或CMS等框架。以下是需要采取的步骤概要:

  1. 首先,制作你的" rails app"存在于/app中,您可以移动所有" 应用相关的"路线到" app"命名空间。
  2. 在您的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. 这一步有点棘手。只有资源(css,javascript)在网站应用程序之间有所不同,才有必要。您需要创建分别位于/assets/javascripts/assets/stylesheets的app.js,website.js,app.css,website.css。您还需要创建&#34;网站&#34;和&#34; app&#34; /assets/stylesheetsassets/javascripts中的文件夹。将所有应用程序相关资产移至相应的/javascripts/app/stylesheets/app文件夹。

    5. 添加以下代码: 到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(如果您已经指出&#34; website.com&#34;正确地使用Heroku。请参阅Reference) 。

      下一批步骤是使网站在根命名空间中的rails应用程序中生效。

      1. 将所有必需的网站资源(html,css,javascript)移至资源文件夹中相应的/javascripts/website/stylesheets/websites文件夹。
      2. 添加以下代码: 到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. 现在,您可以创建将在WebsiteController中管理网站页面(/controllers)的控制器。

          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. 最后确保遍历所有标记,以替换img标记的所有link_to路径和src。甚至需要更改 app 的路径,因为所有路径都已更改。

        5. 另一个选择是使用high voltage gem将静态网站html添加到您的rails应用程序。