我正在为客户创建一个rails登陆页面,他希望该应用程序成为他网站的子页面。
app.herokuapp.com website.com/app
如何配置域,以便在用户键入website.com/app时 而是显示app.herokuapp.com?
编辑。 OBS。客户端网站很大,可以在domains.com上安装的WordPress上运行
我是rails和域名服务的新手,如果这是一个基本问题,我很抱歉。
答案 0 :(得分:0)
Heroku必须在您网域的根目录中运行rails应用。因此,基本上只使用Heroku和任何域名服务,您尝试做的事情都是不可能的。
然而,通过使整个东西成为rails应用程序但使用命名空间可以实现所需的结果。这仅在网站不需要运行服务器时才有效。即它只是HTML,CSS和JS的静态,但没有像WordPress这样的Angular或CMS等框架。以下是需要采取的步骤概要:
/app
中,您可以移动所有" 应用相关的"路线到" app"命名空间。在您的routes.rb中:
Rails.application.routes draw do
namespace :app do
# all application routes should be placed in here
end
end
您需要将所有 app 相关控制器移至/controllers/app
。
所有应用程序控制器都需要重命名其类以具有正确的命名空间。因此,您需要将每class WhateverController < ApplicationController
更改为class App::WhateverController < ApplicationController
您需要将所有应用相关视图移至/views/app
这一步有点棘手。只有资源(css,javascript)在网站和应用程序之间有所不同,才有必要。您需要创建分别位于/assets/javascripts
和/assets/stylesheets
的app.js,website.js,app.css,website.css。您还需要创建&#34;网站&#34;和&#34; app&#34; /assets/stylesheets
和assets/javascripts
中的文件夹。将所有应用程序相关资产移至相应的/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(如果您已经指出&#34; website.com&#34;正确地使用Heroku。请参阅Reference) 。
下一批步骤是使网站在根命名空间中的rails应用程序中生效。
/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' %>
现在,您可以创建将在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
对于每个操作,请在/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
最后确保遍历所有标记,以替换img标记的所有link_to
路径和src
。甚至需要更改 app 的路径,因为所有路径都已更改。
另一个选择是使用high voltage gem将静态网站html添加到您的rails应用程序。