2016-08-17 62 views
0

我正在为客户端创建导航着陆页,他希望该应用成为其网站的子页面。向现有页面域的子页面添加导轨herokuapp

app.herokuapp.com website.com/app

我如何配置域,以便当用户键入website.com/app 的app.herokuapp.com出现呢?

编辑。 Obs。客户端网站很大,运行在domains.com上的WordPress上运行

我是新来的铁路和域服务,抱歉,如果它太基本问题。

回答

0

Heroku必须在域名的根目录下运行rails应用程序。所以基本上你只用Heroku和任何域名服务是不可能的。

但是,通过使整个事情成为一个rails应用程序,但命名空间可以实现所需的结果。这只能在网站不需要服务器运行的情况下运行。即只有HTML,CSS和JS是静态的,但没有像Angular或CMS这样的框架,就像WordPress一样。这里有一个需要采取这样做的步骤概述:

  1. 首先,让你的“Rails应用程序”存在于/app,你可以将所有的“应用有关”路线的“应用程序”命名空间。

在你的routes.rb:

Rails.application.routes draw do 

    namespace :app do 
    # all application routes should be placed in here 
    end 

end 
  • 你需要将所有应用相关的控制器移到/controllers/app

  • 全部应用程序控制器需要将其类重命名为具有适当的名称空间。所以,你需要改变每class WhateverController < ApplicationControllerclass App::WhateverController < ApplicationController

  • 你需要的所有应用相关的视图移动到/views/app

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

  • 添加下面的代码: 到应用程序。JS:

    //= require_tree ./app 
    

    要app.css:

    *= require_tree ./app 
    

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

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

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

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

    下一批步骤是让网站在根名称空间的rails应用程序中生活。

  • 移动所需的所有网站资产(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' %> 
    
  • 现在,您可以创建将在/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 
    
  • 对于每个操作,请在/views/website中创建相应的视图。例如,主页视图应该是homepage.html.erb。同时将网站中的HTML复制并粘贴到正确的.html.erb文件中。

  • 把它与路线联系起来。

    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 
    
  • 最后一定要经过的所有标记随处可见,以取代所有link_to路径和src为img标签。即使路径应用程序需要更改,因为所有路线都已更改。

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

    +0

    将网站添加到公共文件夹,然后将路由配置为获取/应用程序作为索引#索引不是更容易吗? – Allan

    +0

    此外,我的问题是,他们的网站在domains.com内部以WordPress运行,所以我认为我不能只在heroku中安装整个WordPress网站。它不会在你的答案,因为他们可以在WordPress上创建新帖子。所以我不能那样做。非常感谢你的回答。它可能有助于其他情况。 – Allan

    +0

    @Allan你不能root_to公共html文件,你仍然需要创建一个控制器。 –