Heroku 必须在您的域的根目录中运行 rails 应用程序。所以基本上你想要做的事情是不可能只使用 Heroku 和任何域服务。
然而,通过将整个东西制作成一个带有命名空间的 Rails 应用程序,可以达到预期的效果。这仅在网站不需要服务器运行时才有效。即它是静态的,只有 HTML、CSS 和 JS,但没有像 Angular 或像 WordPress 这样的 CMS 框架。以下是为此需要采取的步骤的概要:
- 首先,为了使您的“rails 应用程序”存在于
/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
这一步有点棘手。只有在 website 和 application 之间的资产(css、javascript)不同时才需要。您需要创建 app.js、website.js、app.css、website.css,它们将分别位于 /assets/javascripts 和 /assets/stylesheets 中。您还需要在/assets/stylesheets 和assets/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 应用程序中运行。
- 将所有必需的网站资产(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 标签。甚至 app 的路径也需要更改,因为所有路由都已更改。
另一种选择是使用 high voltage gem 将静态网站 html 添加到您的 Rails 应用程序中。