【发布时间】:2015-02-24 03:38:12
【问题描述】:
我已经按照说明完成了 Albert Pai 的 AngularJS Tutorial:Learn to Build Modern Web Apps with Angular and Rails。使用 WEBrick 和 Foreman 时,我的应用程序可以在本地运行。然而,在将同一个应用程序部署到 Heroku 之后,我遇到了以下 AngularJS 语句的问题:
<div ng-include="'nav/_nav.html'"></div>
在 Heroku 服务器上,没有找到 _nav.html 部分视图。所以我收到以下错误:
GET http://fathomless-sands-8666.herokuapp.com/nav/_nav.html 404 (Not Found)
屏幕截图(我缺少允许登录和注册的导航栏,使用了 Device gem):
application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>FlapperNews</title>
<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_include_tag 'application' %>
<%= csrf_meta_tags %>
</head>
<body ng-app="flapperNews">
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<div class="col-md-6 col-md-offset-3">
<div ng-include="'nav/_nav.html'"></div>
<ui-view></ui-view>
</div>
</body>
</html>
_nav.html
<div class="collapse navbar-collapse pull-right" ng-controller="NavCtrl">
<ul class="nav navbar-nav">
<li><a href="#/home">Home</a></li>
<li ng-hide="signedIn()"><a href="#/login">Log In</a></li>
<li ng-hide="signedIn()"><a href="#/register">Register</a></li>
<li ng-show="signedIn()"><a href="#/">{{ user.username }}</a></li>
<li ng-show="signedIn()"><a ng-click="logout()">Log Out</a></li>
</ul>
</div>
Heroku 日志:
2015-02-23T12:26:14.936469+00:00 heroku[router]: at=info method=GET path="/assets/application-71f8573cbf92d37602f8bd1449f54ed5.js" host=fathomless-sands-8666.herokuapp.com request_id=6695089f-3134-4397-81da-6832439bc1a4 fwd="212.149.201.185" dyno=web.1 connect=0ms service=10ms status=200 bytes=166290
2015-02-23T12:26:15.938797+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=fathomless-sands-8666.herokuapp.com request_id=61831df5-456c-492b-a315-f0c13faa64cf fwd="212.149.201.185" dyno=web.1 connect=0ms service=3ms status=200 bytes=143
2015-02-23T12:26:15.957956+00:00 heroku[router]: at=info method=GET path="/nav/_nav.html" host=fathomless-sands-8666.herokuapp.com request_id=c40773c6-2f68-4533-b2a3-d9a1bad30ce7 fwd="212.149.201.185" dyno=web.1 connect=0ms service=59ms status=404 bytes=1531
2015-02-23T12:26:15.898369+00:00 app[web.1]: source=rack-timeout id=c40773c6-2f68-4533-b2a3-d9a1bad30ce7 wait=2ms timeout=20000ms state=ready
2015-02-23T12:26:15.935577+00:00 app[web.1]: source=rack-timeout id=61831df5-456c-492b-a315-f0c13faa64cf wait=2ms timeout=20000ms state=ready
2015-02-23T12:26:15.955427+00:00 app[web.1]:
2015-02-23T12:26:15.955433+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/nav/_nav.html"):
2015-02-23T12:26:15.955437+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.2/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
routes.rb
FlapperNews::Application.routes.draw do
devise_for :users
root to: 'application#angular'
resources :posts, only: [:create, :index, :show] do
resources :comments, only: [:show, :create] do
member do
put '/upvote' => 'comments#upvote'
end
end
member do
put '/upvote' => 'posts#upvote'
end
end
部署到 Heroku 的代码可以在 Github 上找到:https://github.com/jyrkim/flapper-news/blob/master/app/views/layouts/application.html.erb 我还创建了 Procfile 并按照 Heroku 的说明设置了 Puma gem:https://devcenter.heroku.com/articles/getting-started-with-rails4#specify-ruby-version-in-app 我在 Gemfile 中没有指定的唯一内容是红宝石版本。我的 Ubuntu 使用 Ruby 2.1 版,而 Heroku 想为我的应用程序使用 2.0 版。 (也许这可能会导致问题)
如果有人知道 Heroku 环境中可能导致问题的原因,请告诉我 - 谢谢。
【问题讨论】:
-
我正在做同样的教程,但在
angular-rails-templates和更改templateURL: home/_home.html部分时遇到了真正的困难。你有什么问题吗?我在控制台中收到一条消息,ActionController::RoutingError (No route matches [GET] "/home.html") -
@PaulFitzgerald 抱歉,我制作教程已经有几个月了,我不太确定我是否遇到过这个问题(尽管我可能也遇到过这个问题,因为有时教程中的代码示例并不总是 100% 覆盖)。尽管如此,最后我在 Stackoverflow 上发布了几个问题后,我得到了教程。关于您的问题,我会检查 home/_home.html 是否存在并且为前一个文件设置了路由。 github.com/jyrkim/flapper-news/tree/master/app/assets/…(github有工作代码,但处于完成阶段)
-
感谢您的回复。我实际上是通过另一篇 SO 帖子弄明白的——这是链轮的问题。有必要将以下行添加到 gemfile
gem 'sprockets', '2.12.3'
标签: angularjs ruby-on-rails-4 heroku