部署 Capistrano 部署 Rails 5 API 时候避免 precompile 的方法

jicheng1014 · 2016年08月02日 · 最后由 smartepsh 回复于 2016年08月03日 · 3199 次阅读

现在公司的新项目开始在 rails 5 上开发了,由于公司是前后端完全独立,所以只用 rails api 就可以了

正常开发之后,遇到了一点小问题:

我们公司使用的部署工具是 capistrano, 我们使用了 capistrano-rails 进行部署,

但是 deploy 的时候,发现报错了

(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as deploy@XXXXXXX: rake exit status: 1
rake stdout: Nothing written
rake stderr: rake aborted!
Don't know how to build task 'assets:precompile' (see --tasks)
/var/www/services/money_api/shared/bundle/ruby/2.3.0/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
/home/deploy/.rvm/gems/ruby-2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:63:in `load'
/home/deploy/.rvm/gems/ruby-2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:63:in `kernel_load'
/home/deploy/.rvm/gems/ruby-2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:24:in `run'
......
(See full trace by running task with --trace)

由于 rails api 没有 assets 的说法,自然运行编译 assets 是失败了,

本来自己写个假的 assets:precompile task,

后来看了下 capistrano-rails 的代码,可以把 assets_roles 设置为空,即 set :assets_roles, [],这样 deploy 就不会调用 assets:precompile 了。

You don't have to do like this. Just comment out require 'capistrano/rails/assets' in your Capfile.

一般把 capfile 中的 require 'capistrano/rails/assets' 这句注释掉就可以了

顺便请问一下你们是用什么来构建 API 的...AMS 吗?

#4 楼 @jicheng1014 AMS 我怎么觉得用 jsonapi 连返回的媒体类型都不对呢......

#5 楼 @smartepsh 哦?我只返回 json 类型是 application/json

#6 楼 @jicheng1014 是的,可是 jsonapi 的媒体类型是注册过的 vnd.api+json,但是 AMS 里哪怕设定的是 jsonapi,返回的同样是 application/json

需要 登录 后方可回复, 如果你还没有账号请 注册新账号