【问题标题】:What is the cleanest way to integrate Ruby on Rails with AngularJS?将 Ruby on Rails 与 AngularJS 集成的最简洁方法是什么?
【发布时间】:2015-12-23 22:50:06
【问题描述】:

我正在创建一个 Ruby on Rails 应用程序,我想在前端使用 AngularJS。 我计划在前端使用以下文件结构(来自here):

angularapp/
----- shared/       // acts as reusable components or partials of our site
---------- sidebar/
--------------- sidebarDirective.js
--------------- sidebarView.html
---------- article/
--------------- articleDirective.js
--------------- articleView.html
----- components/   // each component is treated as a mini Angular app
---------- home/
--------------- homeController.js
--------------- homeService.js
--------------- homeView.html
---------- blog/
--------------- blogController.js
--------------- blogService.js
--------------- blogView.html
----- app.module.js
----- app.routes.js

我主要担心三个问题:

1 - 我希望我的整个 Angular 应用程序都通过 Ruby on Rails 的资产流水线功能

2 - 我不想破坏我的 Angular 应用程序的结构并将其文件移动到相应的 Rails 资产文件夹。

3 - 我不想将我的 Angular 应用程序放在 assets/javascripts 文件夹下,因为它不只包含 javascript 文件。

将此结构与我的 Ruby on Rails 应用程序集成的最简洁方法是什么?

【问题讨论】:

标签: ruby-on-rails angularjs asset-pipeline assets directory-structure


【解决方案1】:

我做了一些研究。事实证明,将 AngularJS 与 Ruby on Rails 集成的最简洁方法实际上是不将它们集成到一个 Ruby on Rails 应用程序的上下文中。相反,最好按照@Minhail 的建议将它们完全分开。

正如布拉德卡尔顿在this article 中建议的那样:

将您的整个项目整齐地塞入其中之一的一个缺点 今天的怪物框架,如 Rails、Django 或 MVC,是它可以 前端开发人员在项目上工作非常困难。

虽然对于经验丰富的 Ruby 开发人员来说设置 rvm、gem 可能很简单 安装所有 ruby​​ 依赖项,处理原生扩展和 跨平台问题。这些东西可能不是你的 前端开发人员最适合。

在文章的后面,他建议更好的架构是保持前端和后端完全分离:

它还促进使前端成为真正的一流应用程序 并确保它真正强大。希望前端 现在鼓励开发人员为不可避免的情况编写代码 后端宕机了。

说“嘿,我们遇到了一些问题”,这是多么好的用户体验啊 现在使用服务器,稍后再试”甚至更好的“搜索 服务目前似乎有问题,但您仍然可以 查看您的个人资料和当前项目。”

根据另一篇文章here,Single Page Application 和 Api Driven Development 是 2015 年的两个 web 开发趋势。我认为这是一个事实,强烈鼓励前后端分离的想法。

一步一步演练的一个很好的例子:

A Complete RESTful Rails-api

An AngularJS Front-End For The Api Above

【讨论】:

【解决方案2】:

我有一个使用 AngularJS 的 Ruby on Rails 应用程序。我也使用特征结构,我所有的文件都在/assets/javascript/。您应该在/config/environments/production.rb 中添加所有 js 和 css 文件,以预编译它们以用于生产。 production.rb 示例:

config.assets.precompile += %w{
  topbar/topbar-controller.js
  topbar/topbar-service.js
  topbar/topbar-directives.js
  topbar/topbar.css
  # ... other features
}

【讨论】:

  • 这也是我不想做的事情。编辑了问题。在那里解释。
  • 是的,我明白你的意思。我有类似的问题。最干净的解决方案是拥有 2 个不同的应用程序 - 1 个 rest api(您的 RoR 应用程序)和一个 node.js 应用程序,您可以在其中渲染您的 AngularJS 应用程序。
  • 好点!但我正在寻找一种方法来在一个 Ruby on Rails Web 应用程序中完成这一切。
  • 只是一个简单的问题,如果我要使用 Angular 构建一个完全独立的前端应用程序,我为什么需要一个 node.js 应用程序?它不能只是一个独立的 Angular 应用程序吗?
  • 因为 AngularJS 只是客户端代码。如果你想要一个真正的公共 Web 应用程序,你需要一个呈现 AngularJS 代码的服务器。这就是我建议使用 node.js 的原因,因为您只需 10 行代码就可以创建一个简单的服务器 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多