标签: ruby-grape

Intellij IDEA不在Groovy项目中从@Grab导入依赖项

我有一个我正在处理的groovy脚本,它使用@Grab注释导入依赖项.此脚本将在IDEA和命令行中运行.但是,在IDE中,导入以红色显示(不可解析),并且不会对如此导入的类进行自动完成.

我通过代理访问公司存储库,该代理已在IDEA中配置为Http代理(模块应该是,并且在我本地的.m2 repo中!)

任何人都有任何想法(没有双关语!)?

我正在使用IntelliJ IDEA 12.5 Ultimate(IU-129.1135),JRE 1.7和Groovy 2.1.6

groovy intellij-idea ruby-grape

42
推荐指数
2
解决办法
9300
查看次数

groovy葡萄verbose

有没有办法在使用Groovy Grape时打印常春藤输出.

当我使用Grape时,它只是挂在那里直到完成下载所有依赖项.我想知道它正在发生什么以及它正在下载什么.

谢谢,

groovy ruby-grape

21
推荐指数
3
解决办法
6147
查看次数

使用Grape和Devise进行用户身份验证

我很难理解并在API中正确实现用户身份验证.换句话说,我很难理解Grape API与Backbone.js,AngularJS或Ember.js等前端框架的集成.

我试图调整所有不同的方法,并阅读了很多相关内容,但谷歌给我带来了真正糟糕的资源,在我看来,就像关于这个话题没有真正好的文章 - 使用Devise和前端的Rails和用户身份验证框架.

我将描述我目前的支点,我希望你能就我的实施提供一些反馈,并指出我正确的方向.

目前的实施

我有跟随Gemfile的后端Rails REST API(我会故意缩短所有文件代码)

gem 'rails', '4.1.6'
gem 'mongoid', '~> 4.0.0'
gem 'devise'
gem 'grape'
gem 'rack-cors', :require => 'rack/cors'
Run Code Online (Sandbox Code Playgroud)

我当前的实现只有具有以下路由的API(routes.rb):

api_base      /api        API::Base
     GET        /:version/posts(.:format)
     GET        /:version/posts/:id(.:format)
     POST       /:version/posts(.:format)
     DELETE     /:version/posts/:id(.:format)
     POST       /:version/users/authenticate(.:format)
     POST       /:version/users/register(.:format)
     DELETE     /:version/users/logout(.:format)
Run Code Online (Sandbox Code Playgroud)

我创建了以下模型user.rb

class User
  include Mongoid::Document
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  field :email,              type: String, default: ""
  field :encrypted_password, type: String, default: ""

  field :authentication_token, …
Run Code Online (Sandbox Code Playgroud)

api ruby-on-rails ruby-grape devise ruby-on-rails-4

21
推荐指数
2
解决办法
1万
查看次数

使用@Grab注释编译Groovy项目时出错

我正在使用Gradle编译Groovy项目,但我注意到当我在代码中使用@Grab注释时,我收到以下错误:

$ gradle compile
:buildInfo
:compileJava UP-TO-DATE
:compileGroovy FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileGroovy'.
> org/apache/ivy/core/report/ResolveReport

(这里有完整的堆栈跟踪http://pastebin.com/0ty4jNct)

我发现使其工作的唯一方法是将'groovy'和'ivy'模块添加到groovy类路径中,但我想避免这种情况,因为不推荐使用groovy类路径.

这是Gradle bug吗?还是有更好的方法来管理@Grab依赖?

groovy ruby-grape gradle

19
推荐指数
2
解决办法
8124
查看次数

为什么我用Rails和葡萄得到"无法自动加载常量"?

我想为Android应用做一个API.搜索时,我找到了{grape}.我正在学习本教程,但是在启动Rails服务器时遇到问题:

=> Booting WEBrick
=> Rails 4.0.2 application starting in development on http://0.0.0.0:80
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-4.0.2/lib/act
ive_support/dependencies.rb:464:in `load_missing_constant': Unable to autoload c
onstant Usuarios, expected C:/Sites/appCerca/app/api/v1/usuarios.rb to define it
 (LoadError)
Run Code Online (Sandbox Code Playgroud)

我的目录:

app
..api
....api.rb
....v1
......root.rb
......usuarios.rb
Run Code Online (Sandbox Code Playgroud)

和文件:

#application.rb
module AppCerca
  class Application < Rails::Application
      config.paths.add "app/api", glob: "**/*.rb"
       config.autoload_paths += Dir["#{Rails.root}/app/api/*"]
  end
end

#routes.rb
AppCerca::Application.routes.draw do
  mount API::Root => '/'
  [...]

#app/api/root.rb …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-grape

16
推荐指数
1
解决办法
8710
查看次数

让groovy脚本从像葡萄这样的文件系统中抓取一个罐子

Grape似乎可以很好地为你的类路径添加jar.它还可以执行很多其他操作,例如提取和依赖关系管理.例如

#!/home/robert/bin/groovy

import org.apache.commons.lang.StringUtils

@Grab(group='commons-lang', module='commons-lang', version='2.4')

def strings = ['Hello', 'Groovy', 'AVeryLongWord!', 'A simple sentence']
strings.each { String aString ->
    println "$aString: ${StringUtils.abbreviate(aString,10)}"
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我的文件系统上有一个jar,我想动态添加到文件系统,那么我不得不求助于一个更加丑陋的解决方案.

#!/home/robert/bin/groovy

def loader = this.class.classLoader.rootLoader
loader.addURL(new File("/home/robert/somejars/arithmetic-1.1.jar").toURI().toURL())

// can't use traditional package import
arithmeticMainClass = Class.forName("org.scharp.arithmetic.Main")

println "42 - 23 = " + arithmeticMainClass.subtract(42, 23)

// can't use "new" operator
myArithmeticObject = arithmeticMainClass.newInstance()
Run Code Online (Sandbox Code Playgroud)

有没有办法让葡萄从文件系统中抓取一个罐子?如果没有,我可以以某种方式复制葡萄在groovy/java中做的事情吗?

我希望这个解决方案适用于可由许多用户和许多不兼容的jar运行的脚本,因此将jar添加到公共目录(如〜/ .groovy/lib /)将不起作用.

我可以为本地的jar库创建一个本地maven存储库,但这似乎有些过分.

groovy jar ruby-grape

14
推荐指数
2
解决办法
8825
查看次数

让Groovy的葡萄走吧!

我试图在Groovy 1.6-beta-2中使用新的Groovy Grape功能,但是我收到了一条错误消息;

unable to resolve class com.jidesoft.swing.JideSplitButton
Run Code Online (Sandbox Code Playgroud)

运行stock示例时,从Groovy控制台(/opt/groovy/groovy-1.6-beta-2/bin/groovyConsole);

import com.jidesoft.swing.JideSplitButton
@Grab(group='com.jidesoft', module='jide-oss', version='[2.2.1,)')
public class TestClassAnnotation {
    public static String testMethod () {
        return JideSplitButton.class.name
    }
}
Run Code Online (Sandbox Code Playgroud)

我甚至尝试运行葡萄命令行工具以确保导入库.像这样;

 $ /opt/groovy/groovy-1.6-beta-2/bin/grape install com.jidesoft jide-oss
Run Code Online (Sandbox Code Playgroud)

哪个安装库就好了.如何从groovyConsole获取正确运行/编译的代码?

grails groovy ruby-grape

12
推荐指数
2
解决办法
2万
查看次数

Ruby Grape JSON-over-HTTP API,自定义JSON表示

我有一个小型的原型子类Grape::API作为机架服务,并Grape::Entity用于呈现我的应用程序的内部对象.

我喜欢Grape::EntityDSL,但我很难找到我应该超越默认的JSON表示,这对我们来说太轻了.我被要求以"jsend或类似"格式生成输出:http://labs.omniti.com/labs/jsend

我完全不确定改变的性质与Grape框架最相符(我想在这里采用最小阻力路径).我应该创建一个自定义的Grape格式化程序(我不知道如何做到这一点),新的机架中间件(我这样做是为了通过SysLog记录API输入/输出 - 但格式化似乎很糟糕,因为我需要解析正文从JSON返回以添加容器级别),或者更改Grape::Entity为例如RABL?

示例代码("app.rb")

require "grape"
require "grape-entity"

class Thing
  def initialize llama_name
    @llama_name = llama_name
  end
  attr_reader :llama_name
end

class ThingPresenter < Grape::Entity
  expose :llama_name
end

class MainService < Grape::API
  prefix      'api'
  version     'v2'
  format      :json
  rescue_from :all

  resource :thing do
    get do
      thing = Thing.new 'Henry'
      present thing, :with => ThingPresenter
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

Rackup文件("config.ru")

require File.join(File.dirname(__FILE__), "app")
run MainService
Run Code Online (Sandbox Code Playgroud)

我启动它:

rackup -p 8090 …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-grape jsend

10
推荐指数
1
解决办法
6739
查看次数

葡萄错误处理策略?

我正在使用Grape和Rails来创建REST API.我有基本的架构,我正在寻找"清理"的地方.其中一个地方是错误处理/处理.

我目前正在整个API的root.rb(GRAPE :: API基类)文件中解决错误.我格式化它们然后通过rack_response发回错误.一切正常,但是root.rb文件变得有点臃肿,所有的错误都被拯救了,其中一些有特殊的解析需要完成.我想知道是否有人为错误处理制定了一个好的策略,以便它可以移动到它自己的模块中并使root.rb(GRAPE :: API基类)相当精简.

我真的想创建一个错误处理模块并为每种类型的错误定义方法,例如......

module API
 module ErrorHandler
   def record_not_found
     rack_response API::Utils::ApiErrors.new({type: e.class.name, message: 'Record not found'}).to_json, 404
   end
 end
end
Run Code Online (Sandbox Code Playgroud)

然后在root.rb文件中执行类似的操作

module API
  class Root < Grape::API
    prefix 'api'
    format :json

    helpers API::ErrorHandler

    rescue_from ActiveRecord::RecordNotFound, with: :record_not_found # Use the helper method as the handler for this error
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有人做过这样的事情?我一直在尝试上述策略的各种风格,但我似乎无法做任何事情.

ruby rest ruby-on-rails ruby-grape grape-entity

8
推荐指数
1
解决办法
3692
查看次数

为什么ActionDispatch :: Routing :: RouteSet需要这么长时间

我在Rails 4.2.1之上使用Grape为我们的应用程序提供API.

但是当我今天检查Newrelic的性能时,我发现RackApp Proc#call并且Grape API::Root#call占用了大量的时间.(见截图)

在此输入图像描述

然后我尝试记录中间件消耗的时间rack_timer,发现ActionDispatch::Routing::RouteSet大部分时间占用了:

Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 67.12579727172852 ms
Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 101.51457786560059 ms
Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 84.18059349060059 ms
Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 1236.2565994262695 ms
Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 8.124351501464844 ms
Rack Timer (Application Action) -- ActionDispatch::Routing::RouteSet: 55.65309524536133 ms
Run Code Online (Sandbox Code Playgroud)

甚至有些情况需要500毫秒到1000毫秒ActionDispatch::Routing::RouteSet.我怎么能找到这个问题,怎么知道我在Rails路线上做错了什么?

非常感谢您的帮助.

performance ruby-on-rails ruby-grape newrelic ruby-on-rails-4

8
推荐指数
1
解决办法
690
查看次数