Gem 如果不用 Rails 的话,哪些 gem 不能用?

u1450154824 · 2016年09月08日 · 最后由 u1450154824 回复于 2016年09月09日 · 4464 次阅读

项目是 grape on rails,感觉 rails 有点浪费,想只用 grape 和 activerecord,但是发现用了其他的 gem,比如 carrierwave,doorkeeper,好像是比较依赖 rails.如果不用 rails,哪些 gem 是不能继续用的,或者怎么去配置才能继续用,有没有前辈有经验.@robbin,目前刚看了 robbin 前辈的 grape on rainbows 这个,很有启发. 这些是我用的 gems

source 'https://gems.ruby-china.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.6'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc

# Use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'
gem 'mysql2'
gem 'kaminari'
gem 'grape', '~>0.16.2'
gem 'grape-active_model_serializers'
gem 'hashie-forbidden_attributes'
gem 'grape-swagger', '~>0.11.0'
gem 'grape-swagger-rails', '~>0.2.1'
gem 'grape-jbuilder'
gem 'rest-client'
gem 'carrierwave'
gem 'carrierwave-aliyun', :github => 'luxious/carrierwave-aliyun'
gem 'settingslogic'
gem 'ransack'
gem 'carrierwave-base64'
gem 'mina', require: false
gem 'puma'
gem 'mina-puma', require: false
gem 'mina-sidekiq', require: false
gem 'bulk_insert'
gem 'chinese_regions_rails'
gem 'redis-rails'
gem 'redis', '~>3.2'
gem 'rucaptcha'
gem 'sidekiq'
gem 'redis-namespace'
gem 'aasm'
gem 'rack-contrib'
gem 'idcard_verity'
gem 'sinatra', :require => false
gem 'whenever', :require => false
gem 'doorkeeper'
gem 'paper_trail'
gem 'skylight'
gem 'aliyun_mns', github: 'luxious/aliyun_mns'
group :development, :test do

end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> in views
  gem 'web-console', '~> 2.0'

  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'
  gem 'pry-byebug'
  gem 'better_errors'
  gem 'pry'
  gem 'rails-erd'
  gem 'annotate'
  gem 'rspec-rails'
end


carrierwave 和 doorkeeper 理论上都可以脱离 Rails(准确说应该是 ActionPack)跑的,只是比较麻烦。

既然你都已经用到那么复杂的东西了,还是安心用 Rails 吧,浪费哪里?也就多点进程内存占用而已。

此外,建议直接用 Rails 5 的 API 来代替 Grape。

  • rucaptcha
  • doorkeeper
  • chinese_regions_rails

这几都是需要用到 Rails 某些必要功能的。

#1 楼 @huacnlee 就是内存唉,我这边内存不够用,老板准备让我转行 php😁 .既然不好脱离 rails,那我就不想了。

用 Rails 和不用 Rails 内存区别不回太大的...

你要折腾轻应用,你得熟悉这些东西,熟悉 Ruby 里面的体系,这个比较费神。

此外,你们项目内存不够用和 Rails 没关系,还是实现的问题。

#3 楼 @huacnlee 哪些原因会导致内存不够,什么情况数据会长期占用内存,用的 gem 多对内存有影响码?

#4 楼 @u1450154824 Gem 是主要原因,有些 Gem 可能会在 require 的时候载入一些字典之类的,例如 chinese_regions_rails 这个就很有可能。

https://github.com/bastengao/chinese_regions_rails/blob/master/lib/chinese_regions_rails/json_data_source.rb#L14

是的,我没猜错!这个里面带了一个 600 多 K 的 JSON 文件,在使用的时候载入到内存里面去。当然,600 多 K 还好。

这个内存比黄瓜便宜的时代 如果公司还怕费这钱就别玩儿了;再说 PHP 真比 ruby 省内存?

谢谢各位,我大概已经知道怎么解决现阶段的问题了。

#1 楼 @huacnlee 从 grape 换到 rails5 api,需要哪些准备,我写 controller 比较少,grape 比较多,对 grape 比较熟。有什么文档看看吗?

#1 楼 @huacnlee 以及使用 rails api 比起 grape 有什么样的好处。

#10 楼 @u1450154824

  1. 没啥好处;
  2. 既然 Rails API 也可以写 API,何必用 Grape 呢?
  3. 以后 Rails 升级的时候,你不用等 Grape 升级支持新的 Rails;

#11 楼 @huacnlee api 模式的 controller 与之前写法有哪些改动 .

觉得 grape 方便的一点是已经 有一套可以不在 model 层做参数的 validate,比如 参数需要必须传,参数符合邮件格式等等,不知道 rails api 有没有,还是得自己写 helper 方法之类的来满足参数的校验 @huacnlee ,如果有的话,grape 就没什么优点了

#5 楼 @huacnlee chinese_regions_rails 是将数据导入到数据库,然后从数据库中查的。

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