Tag: ruby on rails 4.1

用于websocket-rails gem的Ruby websocket客户端

我正在开发一个rails网页,需要使用websocketfunction与外部ruby客户端进行通信。 为了做到这一点,我在rails服务器中使用websocket-rails gem,定义client_connected client_disconnected事件以及从客户端接收消息的特定操作(new_message)。 在客户端,我尝试使用不同的rubygem,如faye-websocket-ruby和websocket-client-simple,但在尝试发送消息时总是会出错。 在服务器上,我找不到处理这些消息的方法。 两个gems都有一个send方法,只接受一个字符串(不能指定事件的名称) 我一直在使用的代码如下: 服务器端 应用程序/控制器/ chat_controller.rb class ChatController < WebsocketRails::BaseController def new_message puts ')'*40 end def client_connected puts '-'*40 end def client_disconnected puts '&'*40 end end 配置/ events.rb WebsocketRails::EventMap.describe do subscribe :client_connected, :to => ChatController, :with_method => :client_connected subscribe :message, :to => ChatController, :with_method => :new_message subscribe :client_disconnected, :to => […]

如何使用’rails s puma’运行配置文件的rails puma服务器

我可以使用rails s puma或只是puma在rails中运行puma服务器。 根据这个答案 ,运行rails s puma使服务器知道rails环境。 它显示了单独运行puma服务器错误等。 我想像这样设置一个配置文件: 配置/ puma.rb workers Integer(ENV[‘PUMA_WORKERS’] || 3) threads Integer(ENV[‘MIN_THREADS’] || 1), Integer(ENV[‘MAX_THREADS’] || 16) rackup DefaultRackup port ENV[‘PORT’] || 3000 environment ENV[‘RACK_ENV’] || ‘development’ … 如果我运行puma -C config/puma.rb一切正常。 但是,如果我运行rails s puma我rails s puma如何给puma选项。 我尝试过以下方法: rails s puma # Puma server works but no config file is passed […]

Rails 4.1.1 w / pg_search – “PG :: SyntaxError:ERROR:AS”或附近的语法错误“”

我从RoR 4.0.4更新到4.1.1以应用最新的安全补丁,看起来pg_search破了。 这是一个错误: PG :: SyntaxError:错误:“AS”处或附近的语法错误第1行:…… sh’,””|| unaccent(’banner’)|| ””)),0)))AS pg_sear … 我正在通过ajax进行搜索,但我不认为这是基于上述输出的问题。 我也在使用will_paginate,但我正在使用的分支应该用rails 4.1.x和pg_search修复以前的问题。 gem ‘will_paginate’, :git => ‘https://github.com/nazgum/will_paginate.git’ #until rails 4.1 will_paginate fixed 这是我正在执行搜索的代码模型: include PgSearch pg_search_scope :search, against: [:title, :body], using: {tsearch: {dictionary: “english”}}, ignoring: :accents def self.text_search(query) if query.present? search(query) else scoped end end 在RoR版本颠簸之前,一切都在工作 – 希望有人可能会有一些建议。 这是完整的堆栈跟踪: : SELECT COUNT(“photos”.*, ((ts_rank((to_tsvector(‘english’, […]

是否存在Rails 4循环依赖::破坏变通方法?

作为循环dependent: :destroy的示例dependent: :destroy问题: class User < ActiveRecord::Base has_one: :staff, dependent: :destroy end class Staff < ActiveRecord::Base belongs_to :user, dependent: :destroy end 如果我调用user.destroy ,也应该销毁相关的staff 。 相反,调用staff.destroy应该销毁相关user 。 这在Rails 3.x中运行得很好,但是Rails 4.0中的行为发生了变化(并且在4.1中继续),这样就形成了一个循环并最终得到一个错误,“堆栈级别太深了”。 一个明显的解决方法是使用before_destroy或after_destroy创建自定义回调以手动销毁关联对象,而不是使用dependent: :destroy机制。 即使GitHub中针对这种情况开放的问题也有一些人推荐这种解决方法。 不幸的是,我甚至无法使用该解决方法来工作。 这就是我所拥有的: class User < ActiveRecord::Base has_one: :staff after_destroy :destroy_staff def destroy_staff staff.destroy if staff and !staff.destroyed? end end 这不起作用的原因是staff.destroyed? 总是返回false 。 所以它形成了一个循环。

否定ActiveRecord查询范围

我的模型范围略微复杂 class Contact { where(inactive: false) } scope :groups, -> { where(contact_type: 2308) } scope :group_search, -> (query) do active.groups.where(“last_name LIKE ‘%’ + ? + ‘%'”, query) end end 出于测试目的,我想确保group_search 未返回的所有Contacts都被排除在正确的原因之外。 但要获得该列表,我必须加载 Contact.all – Contact.group_search(‘query’) 它运行两个查询,返回一个Array而不是一个Relation ,并且比我想要的慢。 由于我正在测试group_search范围,因此编写另一个负面范围会破坏这一点。 我宁愿做一些像: Contact.merge.not(Contact.group_search(‘query’)) 生成以下SQL查询: SELECT * FROM contacts WHERE NOT (contact_type = 2308 AND inactive = 0 AND […]

使用Bootstrap或Foundation在Rails 4.1下的Flash消息颜色错误

以下代码使用Bootstrap 3.0显示Rails Flash消息: <div class="alert alert-“> × “flash_#{name}” %> 代码来自文章Bootstrap和Rails 。 Foundation和Rails一文中的类似代码可以与Foundation一起使用: <div data-alert class="alert-box round “> × 对于Bootstrap或Foundation,当我将我的应用程序从Rails 4.0升级到Rails 4.1时,所有闪存消息都显示为红色,甚至是“通知”消息,这些消息应显示为绿色。 Rails 4.1中有什么改变来打破这段代码?

为什么Ruby on Rails secretts.yml没有加载?

我试图从config/secrets.yml文件中访问我的密钥。 secrets.yml: development: secret_key_base: laksjfla…alskdfjlaksjdflaksd other_secret: password Rails控制台: $ rails c > Rails.application.secrets > => {:secret_key_base=>”laksjfla…alskdfjlaksjdflaksd”} 我的other_secret在哪儿?

ActionDispatch :: Routing :: RouteSet#调用Rails 4.1真的很慢

我搜索了几天但找不到这个问题的任何相关答案。 在Heroku上托管的我的Rails 4.1应用程序中,当负载增加时,一些PUT请求变得非常慢。 今天最慢的是53秒。 所有没有数据库(MongoDB)注册任何慢查询。 通常这个请求需要0.3ms,所以非常快。 无论有效载荷是什么,请求都很慢。 在安装New Relic后,它更清楚了解情况,但我仍然不知道在哪里解决这个问题。 控制器中的代码很快,但根据New Relic,速度慢的是ActionDispatch :: Routing :: RouteSet #call 这是New Relic报道的转储: Slowest components Count Duration % ActionDispatch::Routing::RouteSet#call 1 53,000 ms 100% Plugin::FetchablesController#update 1 38 ms 0% Rails::Rack::Logger#call 1 1 ms 0% ActionDispatch::Cookies#call 1 1 ms 0% ActiveSupport::Cache::Strategy::LocalCache::Middleware#call 1 0 ms 0% Rack::Runtime#call 1 0 ms 0% Total 53,000 […]

在RSpec 3请求中设置标头

我正在尝试为需要身份validation的某些RSpec请求设置标头。 标题是ACCESS_TOKEN 。 无论我如何设置标头,它都永远不会被设置。 我知道应用程序有效,因为我可以手动测试它,我只是不能让rspec测试工作。 请在此处查看此问题的完整源代码和测试: https : //github.com/lightswitch05/rspec-set-header-example 由于在我的大多数请求规范中都使用了身份validation,因此我创建了支持帮助程序模块来检索访问令牌并将其设置在标头中。 下面是我如何设置标题的摘要,看看我在完整源代码中尝试过的所有内容 # my_app/spec/support/session_helper.rb module SessionHelper def retrieve_access_token post api_v1_session_path({email: ‘test@example.com’, password: ‘poor_password’}) expect(response.response_code).to eq 201 expect(response.body).to match(/”access_token”:”.{20}”/) parsed = JSON(response.body) token = parsed[‘access_token’][‘access_token’] @request.headers[‘HTTP_ACCESS_TOKEN’] = token end end 使用此帮助程序的示例请求规范应该可以工作,但始终会失败,因为标头永远不会被设置: # my_app/spec/requests/posts_spec.rb # … context “create” do it “creates a post” do retrieve_access_token post = FactoryGirl.build(:post) […]

Rails 4 – 执行简单查询时未定义的方法`call’

我是Rails的新手,但这看起来非常简单。 我有一个名为Game的模型生成如下: rails generate model Game name:string year:integer manufacturer:string notes:string is_active:boolean 我已经在表中加载了一些数据,我正在尝试获取is_active为true所有行。 我希望我的模型类似于: class Game 1) end 我的问题是每当我尝试绑定到Game.active查询时,我都会收到错误。 这是rails控制台中的相同错误,或者我尝试将其设置为控制器中的变量。 错误是: undefined method `call’ for # 在控制台中运行时,我看到: irb(main):001:0> Game.active NoMethodError: Game Load (0.2ms) SELECT `games`.* FROM `games` WHERE `games`.`is_active` = 1 undefined method `call’ for # from /home/dcain/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:136:in `method_missing’