帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:rails  流程  ember  unify  
Easily integrate Ember CLI with rails.

  • 源代码名称:ember-cli-rails
  • 源代码网址:http://www.github.com/thoughtbot/ember-cli-rails
  • ember-cli-rails源代码文档
  • ember-cli-rails源代码下载
  • Git URL:
    git://www.github.com/thoughtbot/ember-cli-rails.git
  • Git Clone代码到本地:
    git clone http://www.github.com/thoughtbot/ember-cli-rails
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/thoughtbot/ember-cli-rails
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Rails

    统一你的EmberCLI和 Rails 工作流 !

    embercli rails是为你提供两个世界中最好的:

    • 使用最新的JavaScript技术和EmberCLI插件保持最新
    • 在单个进程中开发 Rails API和Ember前端
    • 将生成的内容插入到EmberCLI应用程序中
    • 避免通过单个域提供EmberCLI应用程序和API来避免交叉源资源共享陷阱
    • 编写真正的end-to-end集成测试,通过javascript启用的Capybara测试来练习整个应用程序栈
    • 使用单个 git push 将整套应用程序部署到 tmodel

    如果你遇到麻烦,请签入示例项目。

    EmberCLI rails支持 EmberCLI 1.13.13和更高版本。

    安装

    将以下内容添加到 Gemfile:

    gem "ember-cli-rails"

    然后运行 bundle install:

    $ bundle install

    如果还没有创建Ember应用程序,请生成一个新的应用程序:

    $ ember new frontend --skip-git

    设置

    首先,生成 gem的初始值设定项:

    $ rails generate ember:init

    这将创建以下初始值设定项:

    # config/initializers/ember.rbEmberCli.configure do |c|
     c.app :frontendend

    这个初始化器假定你的Ember应用程序存在于 Rails.root.join("frontend") 中。

    如果不是这种情况,你可以

    • 将现有的Ember应用程序移动到 Rails.root.join("frontend")
    • 配置 frontend 以在它的当前目录中引用Ember应用程序:
    c.app :frontend, path:"~/projects/my-ember-app"

    初始值设定项选项

    • name - 表示Ember应用程序的NAME 。

    • path - 你的Ember CLI应用程序所在的路径。 默认值是 Rails root 中的应用程序的NAME 。

    • silent - 为Ember命令提供 --silent 选项来控制它的输出的详细程度。

    • yarn - 在安装依赖项时启用纱线包管理器

    EmberCli.configure do |c|
     c.app :adminpanel# path defaults to `Rails.root.join("adminpanel")` c.app :frontend,
     path:"/path/to/your/ember-cli-app/on/disk" c.app :payments, silent:true# by default it's falseend

    接下来,安装 ember-cli-rails-addon插件:

    $ cd path/to/frontend
    $ ember install ember-cli-rails-addon

    请确保插件的MINOR 版本 MATCHES的MAJOR 是 gem 和 MINOR 版本的。

    例如如果你正在使用 0.6.x的版本,请在你的Ember中指定 ~> 0.6.0:

    {
     "devDependencies": {
     "ember-cli-rails-addon": "~> 0.6.0" }
    }

    插件挂载

    配置 Rails 以将请求路由到 frontend Ember应用程序:

    # config/routes.rbRails.application.routes.draw do mount_ember_app :frontend, to:"/"end

    路由选项

    • to - 作为Ember应用程序处理的路径。 这将只适用于 format: :html 请求。 此外,这也将处理子路由。 例如安装 mount_ember_app :frontend, to:"/frontend" 将处理 format: :html 请求以进行 /frontend/posts 处理。 注意:如果指定自定义路径,则还必须在 frontend/config/environment.js 中更新 rootURL 。 有关更多信息,请参阅挂载多个Ember应用程序插件。
    • controller - 默认为 "ember_cli/ember"
    • action - 默认为 "index"

    最后,安装你的应用程序的Ember依赖项:

    $ rake ember:install

    启动 Rails 应用程序,导航到 "/",并查看EmberCLI应用程序 !

    插件开发

    EmberCLI Rails 公开了几个有用的rake任务。

    ember:install

    安装Ember应用程序的依赖项。

    ember:compile

    编译Ember应用程序。

    ember:test

    执行ember套件测试。

    如果使用Rake运行测试套件,请确保将你的测试任务配置为依赖于 ember:test

    例如要配置一个裸机命令来运行RSpec和Ember测试套件,请配置任务以依赖于 specember:test

    task default: [:spec, "ember:test"]

    部署

    当 Rails 在生产模式下运行时,embercli rails停止运行运行时编译。 相反,配置的应用程序在 rake assets:precompile 。 这使终端用户快速地进行了操作,并扩展了普通 Rails 资产。

    配置信息,包括Heroku和 Capistrano的说明,可以在下面找到。

    CDN

    在生产环境中,应该通过内容传递网络来提供资产。

    在CDN上配置 ember-cli-rails 应用程序为ember服务非常类似于配置一个EmberCLI应用程序以通过 CDN 服务资产:

    var app =newEmberApp({
     fingerprint: {
     prepend:'https://cdn.example.com/' }
    });

    如果你从 "/" 以外的路径提供Ember应用程序,则 prepend URL必须以挂载的路径结束:

    var app =newEmberApp({
     fingerprint: {
     // for an Ember application mounted to `/admin_panel/` prepend:'https://cdn.example.com/admin_panel/',
     }
    });

    只要你的CDN被配置为从你的Rails 应用程序拉,你的资产就会在CDN上被服务。

    的部署策略

    默认情况下,embercli rails使用基于文件的部署策略,这取决于 ember build的输出。

    使用这里部署策略,Rails 将为 ember build 生成的index.html 文件和它的他资产提供服务。

    这些embercli生成的资产与 Rails'其他 static 文件提供了相同的Cache-Control 标头:

    # config/environments/production.rbRails.application.configure do# serve static files with cache headers set to expire in 1 year config.static_cache_control ="public, max-age=31622400"end

    如果需要重写这里行为的快速部署"。production 中的策略)的( 例如如果你使用的是 ember-cli-deploy"闪存,可以以在初始值设定项中指定策略类:

    EmberCli.configure do |config|
     config.app :frontend, deploy: { production:EmberCli::Deploy::Redis }end

    本示例配置 frontend 应用程序,使用 ember-cli-rails-deploy-redis gem 从 ember-cli-deploy-redis -populated Redis条目检索索引的HTML 。

    如果在 development 或者 test 中使用自定义策略部署 HTML,请通过设置 ENV["SKIP_EMBER"] = true 来禁用 embercli rails的构建步骤。

    备注:

    指定部署策略只对使用 mount_ember_apprender_ember_app 帮助器的应用程序支持。

    Heroku

    要为Heroku配置 embercli rails应用程序:

    • 执行 rails generate ember:heroku
    • 提交新生成的文件。
    • 添加 NodeJS buildpack 并配置NPM以包含依赖文件( 如果你的构建过程需要 bower )的bower 执行。
    $ heroku buildpacks:clear
    $ heroku buildpacks:add --index 1 heroku/nodejs
    $ heroku buildpacks:add --index 2 heroku/ruby
    $ heroku config:unset SKIP_EMBER

    你已经准备好部署:

    $ git push heroku master

    EmberCLI编译在部署时发生,由 asset:precompile rake任务触发。

    每次在项目中引入额外的应用程序时,请运行

    Slug大小

    Heroku的尺寸是限制大小。 构建过程创建了不需要服务器运行的工件,但是被包含在部署的tmodel记录中。

    忽略这些构建资产可以显著减少slug的大小。

    发行版中讨论了构建包解决方案。

    Capistrano

    embercli rails在embercli编译过程中执行 npm installbower install,由 asset:precompile rake任务触发。

    需要在会话的部署 SSH $PATH 中定义 npmbower 可执行文件。 在 .bash_profile 中修改会话的$PATH 是不够的。

    要解决这里问题,请将安装目录的node bin 预先添加到系统的目标 $PATH 中:

    #config/deploy/production.rbset :default_env, {
     "PATH" => "/home/deploy/.nvm/versions/node/v4.2.1/bin:$PATH"}

    本示例中的系统使用 nvm 来配置 node 版本。 如果你不使用 nvm,请确保你前面的$PATH 变量包含包含 bowernpm 可以执行文件的目录或者目录。

    用于更快的部署

    deploy/<environment>.rb 中放置以下内容

    set :linked_dirs, %w{<ember-app-name>/node_modules <ember-app-name>/bower_components}

    避免在每次部署时重新生成所有 node 模块和 Bower 组件。 用你的ember应用程序( 默认值为 frontend )的NAME 替换 <ember-app-name>

    覆盖

    默认情况下,由 ember_app 定义的路由将使用内部 EmberCli::EmberController 进行渲染。

    覆盖视图

    EmberCli::EmberController 呈现应用程序的Ember index.html,并将生成的CSRF标记注入到 <head> 中。

    若要自定义视图,请创建 app/views/ember_cli/ember/index.html.erb :

    <%= render_ember_app ember_app do |head| %><% head.append do%><%= csrf_meta_tags %><%end%><%end%>

    EmberCli::EmberController 视图中,ember_app helper 可用,并引用当前EmberCLI应用程序的NAME 。

    要插入EmberCLI生成的index.html,请在视图中使用 render_ember_app helper:

    <!-- app/views/application/index.html.erb --><%= render_ember_app :frontenddo |head, body| %><% head.append do%><%= csrf_meta_tags %><%end%><% body.append do%><%= render partial:"my-analytics"%><%end%><%end%>

    示例中的body block 参数和对 body.append的相应调用都是可选的,可以省略。

    服务生成的CSS

    有关如何使用embercli生成样式表的详细信息,请参阅样式表 。 embercli生成的CSS将被默认嵌入到响应文档的HTML中。

    为 Rails 生成和服务的资产,将它们注入到文档的<head> 中:

    <%= render_ember_app :frontenddo |head| %><% head.append do%><%= stylesheet_link_tag "application"%><%= csrf_meta_tags %><%end%><%end%>

    在of客户机和 Rails 服务器之间共享资产没有技术限制,但是选择一个或者者它的他的可以能简化项目组织。

    在资产编译期间共享代码可能是 。

    例如ember文件的SCSS 不能使用引用'SCSS模块的@import

    替代控制器

    要覆盖这里行为,可以指定 [any of Rails'routing options] 路由选项

    在本示例中,重写 controlleraction 选项:

    # config/routes.rbRails.application.routes.draw do mount_ember_app :frontend, to:"/", controller:"application", action:"index"end

    为EmberCLI生成的index.html 提供 render_ember_app helper 时,请确保控制器的layout 被禁用,因为EmberCLI生成了完全形成的HTML文档:

    # app/controllers/application.rbclassApplicationController <ActionController::Basedefindex render layout:falseendend

    生成EmberCLI生成的JS和 CSS

    推荐使用 render_ember_app 呈现EmberCLI应用程序,这是服务EmberCLI应用程序的积极支持的方法。

    然而,为了向后兼容,ember-cli-rails 支持将embercli生成的资产注入到现有的Rails 布局中。

    按照示例 above,配置已经安装的EmberCLI应用程序,由自定义控制器( ApplicationController,在这个例子中) 提供服务。

    在相应视图中,使用资产助手:

    <%= include_ember_script_tags :frontend%><%= include_ember_stylesheet_tags :frontend%>

    安装多个Ember应用程序

    / 以外的路径中渲染Ember应用程序需要额外的配置。

    考虑一个场景,其中包含 frontendadmin_panel,分别由 //admin_panel 提供。

    首先,在初始值设定项中指定Ember应用程序:

    EmberCli.configure do |c|
     c.app :frontend c.app :admin_panel, path:"path/to/admin_ember_app"end

    接下来,将应用程序挂载到 Rails 路由的其余部分。 注意,admin_panel 路由是在 frontend 路由之前添加的,因为它更具体:

    #/config/routes.rbRails.application.routes.draw do mount_ember_app :admin_panel, to:"/admin_panel" mount_ember_app :frontend, to:"/"end

    然后将应用程序的每个 rootURL 设置为挂载点:

    // frontend/config/environment.jsmodule.exports=function(environment) {
     varENV= {
     modulePrefix:'frontend',
     environment: environment,
     rootURL:'/',
     //.. . }
    };// path/to/admin_ember_app/config/environment.jsmodule.exports=function(environment) {
     varENV= {
     modulePrefix:'admin_panel',
     environment: environment,
     rootURL:'/admin_panel', // originally '/'//.. . }
    };

    最后,配置embercli的指纹指纹以将挂载点前置到应用程序的资产:

    // frontend/ember-cli-build.jsmodule.exports=function(defaults) {
     var app =newEmberApp(defaults, {
     fingerprint: {
     // matches the `/` mount point prepend:'https://cdn.example.com/',
     }
     });
    };// path/to/admin_ember_app/ember-cli-build.jsmodule.exports=function(defaults) {
     var app =newEmberApp(defaults, {
     fingerprint: {
     // matches the `/admin_panel` mount point prepend:'https://cdn.example.com/admin_panel/',
     }
     });
    };

    将embercli生成的资产与 include_ember_script_tagsinclude_ember_stylesheet_tags 帮助器注入到 "/" 之外的路径时,<base> 标记必须注入相应的href 值:

    <basehref="/"><%= include_ember_script_tags :frontend%><%= include_ember_stylesheet_tags :frontend%><basehref="/admin_panel/"><%= include_ember_script_tags :admin_panel%><%= include_ember_stylesheet_tags :admin_panel%>

    如果使用 include_ember 样式帮助器,将路由延迟到 Rails 应用程序,请在路由文件的底部插入 mount_ember_assets 以服务embercli生成的资产:

    # config/routes.rbRails.application.routes.draw do mount_ember_assets :frontend, to:"/"end

    CSRF令牌

    默认情况下,Rails 控制器期望在 non- GET 请求中提交有效的真实性令牌。

    如果没有真品令牌,请求将以 422 Unprocessable Entity 错误( 特别是 ActionController::InvalidAuthenticityToken ) 。

    要向请求添加必要的标记,请将 csrf_meta_tags 插入到模板中:

    <!-- app/views/application/index.html.erb --><%= render_ember_app :frontenddo |head| %><% head.append do%><%= csrf_meta_tags %><%end%><%end%>

    默认情况下默认 EmberCli::EmberController 和默认视图句柄的行为如下。

    如果Ember应用程序与另一个控制器一起安装,它应该将CSRF标记附加到它的<head> 视图。

    ember-cli-rails-addon 配置Ember应用程序,以在 X-CSRF-TOKEN 报头中使用注入的CSRF令牌发出HTTP请求。

    基于的多进程服务器在开发中的应用

    如果在开发中使用多进程服务器( Puma,麒麟,等等 ),请确保它已经配置为运行单个工作进程。

    如果不将服务器限制在单个进程中,多个运行者就可以相互干扰对方的工作 。

    SKIP_EMBER

    如果在环境中设置,SKIP_EMBER 将配置 ember-cli-rails 以完全跳过生成步骤。 如果在 test 或者 development 环境中使用其他部署策略,这很有用。 默认情况下,ember-cli-rails 将跳过 production -like环境中的生成步骤。

    EMBER_ENV

    如果设置在环境中,EMBER_ENV的值将作为 --environment 标志的值传递给 ember 进程。

    如果未指定 EMBER_ENV,当前的Rails 环境将被传递给 ember 进程,而不是标准 Rails 环境,将替换为 production

    RAILS_ENV

    在 EmberCLI Rails 管理时,EmberCLI进程可以访问 RAILS_ENV 环境变量。 这对从EmberCLI进程中检测 Rails 环境很有帮助。

    这对于确定EmberCLI是否在它的独立进程中运行或者由 Rails 管理是很有用的。

    如果在运行 ember-cli-mirage时,要启用服务器端API响应,请检查缺少 RAILS_ENV 环境变量:

    // config/environment.jsif (environment ==='development') {
     ENV['ember-cli-mirage'] = {
     enabled:typeofprocess.env.RAILS_ENV==='undefined',
     }
    }

    RAILS_ENV 将在生产版本中消失。

    EmberCLI支持

    这里项目支持:

    • EmberCLI版本 >= 1.13.13

    ruby 和 Rails 支持

    这里项目支持:

    • ruby 版本 >= 2.2.0
    • Rails 版本 >=4.2.x

    要了解更多关于支持版本和升级的信息,请阅读升级指南

    请参见提供的文档。 谢谢你,贡献者

    许可证

    开放源码模板版权所有( c ) 2015 thoughtbot 。 它包含可以在许可协议文件中指定的术语下重新发布的自由软件。

    ember-cli-rails最初是由 Pavel Pravosud乔纳森 Jackson创建的。

    ember-cli-rails是由 Sean乔纳森 Jackson维护的。

    thoughtbot

    ember-cli-rails是由thoughtbot公司维护和资助的。 thoughtbot的名称和徽标是thoughtbot的商标,。

    我们喜欢开源软件 ! 请参见我们的其他项目或者雇佣我们帮助构建产品。



    文章标签:rails  ember  流程  unify  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语