小编Sim*_*tti的帖子

ruby-openid:执行发现时未设置@socket

我与omniauth/openid有点混乱.

在尝试进行身份验证时,我在日志中发现了这一点:

OpenID::FetchingError: Error fetching https://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username: undefined method `io' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

重要的是undefined method io' for nil:NilClass来自openid/fetchers.rb,在下面的代码片段中:

module Net
class HTTP
def post_connection_check(hostname)
  check_common_name = true
  cert = @socket.io.peer_cert
  cert.extensions.each { |ext|
    next if ext.oid != "subjectAltName"
    ext.value.split(/,\s+/).each{ |general_name|
      if /\ADNS:(.*)/ =~ general_name
        check_common_name = false
...
Run Code Online (Sandbox Code Playgroud)

该错误是由@socket.io.peer_cert@socket未定义生成的.

你们有没有遇到过这个?不太确定原因是什么.

我正在运行的版本:

  • ruby 1.9.3dev(2010-08-17 trunk 29020)[x86_64-darwin10.4.0]
  • ruby-openid(2.1.8)
  • ruby-openid-apps-discovery(1.2.0)
  • omn​​iauth 0.2.0

ruby ruby-openid omniauth net-http

5
推荐指数
1
解决办法
292
查看次数

在Rails 3中处理多步骤"新"操作的RESTful方法

我正在构建一个应用程序,需要一个两步过程来为其中一个模型创建一个对象.

我考虑过......

创建自定义"新"操作的自定义路由

要么

对两个步骤使用相同的"新"操作,但基于参数渲染正确的视图

处理这个问题的最佳方法是什么?

ruby-on-rails

5
推荐指数
1
解决办法
1093
查看次数

rvmrc文件无法正常工作

我已经创建了一个名为gemset rails2ruby192,我.rvmrc在根文件目录中添加了以下代码,但它没有加载gemset.

ruby-1.9.2-p180@rails2ruby192 
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rvm ruby-on-rails-2 rvmrc

5
推荐指数
3
解决办法
5057
查看次数

如何使用带有Rack :: Builder :: map的lotus路由器

有没有办法将地图和(莲花)路由器命名空间一起使用?下面是config.ru我试图作为演示运行的示例.

require 'bundler'
Bundler.require

module Demo

  class Application

    def initialize
      @app = Rack::Builder.new do
        map '/this_works' do
          run  Proc.new {|env| [200, {"Content-Type" => "text/html"}, ["this_works"]]}
        end
        map '/api' do
          run Lotus::Router.new do
            get '/api/', to: ->(env) { [200, {}, ['Welcome to Lotus::Router!']] }
            get '/*', to: ->(env) { [200, {}, ["This is catch all: #{ env['router.params'].inspect }!"]] }
          end
        end
      end
    end

    def call(env)
      @app.call(env)
    end
  end  
end

run Demo::Application.new
Run Code Online (Sandbox Code Playgroud)

ruby hanami hanami-router

5
推荐指数
1
解决办法
618
查看次数

通用路由匹配 ':controller(/:action(/:id))(.:format)' 在 Rails 4 中不可用。出路?

据我所知,Rails 4 不支持match关键字。

但我想创建一个默认的通用路由,如下所示

match ':controller(/:action(/:id))(.:format)', :via => :get
Run Code Online (Sandbox Code Playgroud)

当我在routes.rb中使用上面的代码时,它会抛出以下错误:

Missing :action key on routes definition, please check your routes
Run Code Online (Sandbox Code Playgroud)

有人可以帮我如何在 Rails 4 中实现这一点吗?

ruby ruby-on-rails ruby-on-rails-4

5
推荐指数
1
解决办法
2515
查看次数

RSpec 控制器规范在更新时失败,参数无效

脚手架生成的 RSpec 控制器规范中的一项测试失败了,在我看来,它似乎总是设计失败,但当然它肯定会成功。

我开发了一个 Rails 4 应用程序,其 RSpec 规范由rails g scaffold.

我的控制器规范SkillsController要求我为我的模型填写“有效属性”散列和“无效属性”散列,我这样做了。

除了“使用无效参数的 PUT 更新重新渲染‘编辑’模板”所有测试成功:

 1) SkillsController PUT update with invalid params re-renders the 'edit' template
    Failure/Error: expect(response).to render_template("edit")
      expecting <"edit"> but rendering with <[]>
    # ./spec/controllers/skills_controller_spec.rb:139:in `block (4 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

在 Rails 控制台中,我确认我的invalid_params哈希包含无效参数 ( { hack: 'hack' })。

控制器调用skill_params返回空散列的方法,因为我的invalid_params散列仅包含无效参数。

skill.update(skill_params)使用空skill_params散列调用返回 true,因此该else部分将永远不会执行,并且不会呈现“新”模板:

  def update
    respond_to …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails ruby-on-rails-4

5
推荐指数
1
解决办法
1500
查看次数

使用给定对象查找数据库中的下一个ActiveRecord模型对象

我有一个ActiveRecord模型对象@gallery,它表示Galleries MYSQL表中的一行.有没有办法让我向@gallery表格中的下一个画廊对象提供id?

对我来说,显而易见的方法是:

@galleries = Gallery.find(:all)
index = @galleries.index(@gallery)

@nextgallery = @galleries[index+1]
Run Code Online (Sandbox Code Playgroud)

但后来我必须nilsafe这个,我不必要另一个DB调用来获取所有记录.还有其他出路吗?

ruby activerecord ruby-on-rails

4
推荐指数
1
解决办法
1687
查看次数

是否有红宝石功能!(val).nil ??

我经常发现自己这样做:

!(val).nil?
Run Code Online (Sandbox Code Playgroud)

如果有类似的方法,我的代码会更漂亮

val.exists?
Run Code Online (Sandbox Code Playgroud)

有类似的东西吗?

ruby

4
推荐指数
2
解决办法
3062
查看次数

Rails rack 1.0错误

我尝试启动脚本/服务器时出现此错误:

/opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems.rb:827:in `report_activate_error': RubyGem version error: rack(1.0.0 not ~> 1.0.1) (Gem::LoadError)
 from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems.rb:261:in `activate'
 from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems.rb:68:in `gem'
 from /opt/ruby1.8/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller.rb:34
 from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
 from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 from /opt/ruby1.8/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
 from /opt/ruby1.8/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:521:in `new_constants_in'
 from /opt/ruby1.8/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
 from /opt/ruby1.8/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/commands/server.rb:2
 from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
 from /opt/ruby1.8/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 from script/server:3
Run Code Online (Sandbox Code Playgroud)

这很烦人,因为我做了:

Successfully installed rack-1.1.0
1 gem installed
Installing ri documentation for rack-1.1.0...
Installing RDoc documentation for rack-1.1.0...
Run Code Online (Sandbox Code Playgroud)

但它总是说错误.我有Rails 2.3.5,但我不认为错误是Rails相关,但更像是我的服务器相关的大声笑.

感谢帮助!

gem rack ruby-on-rails

4
推荐指数
1
解决办法
4984
查看次数

路由测试失败:NoMethodError:"///"的未定义方法`values':String

我得到了一个失败的测试,我调试很困难.

我的测试用例是:

it "routes to #active" do
  get ("/parties/active").should route_to("parties#active")
end
Run Code Online (Sandbox Code Playgroud)

我的路线是:

resources :parties do
  get 'active', :on => :collection
end
Run Code Online (Sandbox Code Playgroud)

当我运行测试用例时,我收到以下错误:

NoMethodError: undefined method `values' for "/parties/active":String
Run Code Online (Sandbox Code Playgroud)

完整错误输出:https://gist.github.com/1748264

当我运行rake路线时,我看到:

active_parties GET    /parties/active(.:format)   parties#active
       parties GET    /parties(.:format)          parties#index
               POST   /parties(.:format)          parties#create
     new_party GET    /parties/new(.:format)      parties#new
    edit_party GET    /parties/:id/edit(.:format) parties#edit
         party GET    /parties/:id(.:format)      parties#show
               PUT    /parties/:id(.:format)      parties#update
               DELETE /parties/:id(.:format)      parties#destroy
          root        /                           parties#show
Run Code Online (Sandbox Code Playgroud)

我正在运行的测试几乎与脚手架生成的测试相同:

it "routes to #new" do
  get("/parties/new").should route_to("parties#new")
end
Run Code Online (Sandbox Code Playgroud)

知道发生了什么事吗?

ruby-on-rails rails-routing rspec-rails

4
推荐指数
1
解决办法
1886
查看次数