小编use*_*752的帖子

快速连续执行语句时出现Ruby mysql2错误

我在Ruby中使用Mysql2客户端有一个奇怪的问题.尝试执行以下操作时:

client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
Run Code Online (Sandbox Code Playgroud)

Ruby抛出一个错误,我正在选择的表不存在.但是,如果我尝试以下内容:

client.query("CREATE DATABASE ...; INSERT INTO ..."); #SQL truncated for brevity
sleep 1
client.query("SELECT 1 FROM ...") #SQL truncated for brevity
Run Code Online (Sandbox Code Playgroud)

查询没有问题.在我能够查询之前,似乎需要给MySQL服务器一些时间来加载数据.任何人都可以解释为什么会这样,以及如何在不使用睡眠的情况下以编程方式克服

更新

我初始化客户端如下:

Mysql2::Client.new({
                       :adapter => "mysql2",
                       :host => ip_address,
                       :username => db_username,
                       :password => db_password,
                       :flags => Mysql2::Client::MULTI_STATEMENTS
                   })
Run Code Online (Sandbox Code Playgroud)

我检查了'query_options'属性,async设置为false.我已经尝试显式设置async => false标志无效.

如果我使用,会发生同样的问题

Model.connection.execute(SQL HERE)
Run Code Online (Sandbox Code Playgroud)

注意,这都是在Rails单元测试中执行的.

谢谢

ruby mysql sql

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

优化Postgres删除孤立记录

采取以下两个表:

Table "public.contacts"
       Column       |            Type             |                       Modifiers                       | Storage  | Stats target | Description
--------------------+-----------------------------+-------------------------------------------------------+----------+--------------+-------------
 id                 | integer                     | not null default nextval('contacts_id_seq'::regclass) | plain    |              |
 created_at         | timestamp without time zone | not null                                              | plain    |              |
 updated_at         | timestamp without time zone | not null                                              | plain    |              |
 external_id        | integer                     |                                                       | plain    |              |
 email_address      | character varying           |                                                       | extended |              |
 first_name         | character varying           |                                                       | extended |              | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql query-optimization

9
推荐指数
1
解决办法
565
查看次数

是的,条件验证和 TypeScript

给出以下接口和相应的Yup架构。TypeScript 有没有办法自动推断条件函数参数(例如enabledschema)?

import { object as yupObject, string as yupString, boolean as yupBoolean } from 'yup';

interface Foo {
    enabled: boolean
    name?: string
}

const fooSchema = yupObject().shape({
    enabled: yupBoolean(),
    name: yupString().when('enabled', (enabled, schema) => enabled ? schema.required() : schema)
})
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了yupObject()<Foo>shape<Foo>(..)但都没有帮助。如果不能自动完成,那么schema在这种情况下合适的类型是什么?

typescript yup

6
推荐指数
1
解决办法
6056
查看次数

Rails线程私有消息

我有以下两种型号:

class Message < ActiveRecord::Base
  belongs_to :to_user, :class_name => 'User'
  belongs_to :from_user, :class_name => 'User'

  has_ancestry #Using the 'ancestry' gem
end

class User < ActiveRecord::Base
  has_many :messages_received, :class_name => 'Message', :foreign_key => 'to_user_id'
  has_many :messages_sent, :class_name => 'Message', :foreign_key => 'from_user_id'
end
Run Code Online (Sandbox Code Playgroud)

允许每个用户与另一个用户进行一次对话,并且应该从原始消息中对所有回复进行线程化.

在我的"索引"控制器操作中,如何查询已发送的消息和收到的消息?例如,如果User1命中'/ users/2/messages /',他们应该看到user1和user2之间的整个对话(无论谁发送了第一条消息).我是否需要添加"线程"模型,或者有没有办法用我当前的结构来完成这个?

谢谢.

messaging inheritance chat ruby-on-rails ruby-on-rails-3

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

字符串中的&符号导致长度/比较不正确

我有两个字符串(应该是相同的).一个是从API结果中提取的,一个是由用户输入的.我试图比较它们并失败.当我var_dump时,我得到以下内容:

var_dump($str1);
var_dump($str2);

string(21) "Software & Technology" 
string(25) "Software & Technology"
Run Code Online (Sandbox Code Playgroud)

注意$ str2的长度不正确.谁知道这里发生了什么?

php string urlencode urldecode

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

结合两个数组的Ruby会导致进程耗尽内存

将两个具有100k项目的哈希数组合在一起会导致在2GB VM上运行的进程耗尽内存.我无法理解如何/为什么.

假设我有一个像这样的哈希,我用50个键/值对填充它.

h = {}
1..50.times{ h[SecureRandom.hex] = SecureRandom.hex}
Run Code Online (Sandbox Code Playgroud)

我将100k hs放入两个数组中,如下所示:

a = []
a1 = []
1..100_000.times{ a << h }
1..100_000.times{ a1 << h }
Run Code Online (Sandbox Code Playgroud)

当我尝试添加a1a,IRB内存用完:

2.1.1 :008 > a << a1
NoMemoryError: failed to allocate memory
Run Code Online (Sandbox Code Playgroud)

两个阵列真的太大而无法在内存中组合吗?完成此任务的首选方法是什么?

我正在运行ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux],VM没有运行其他进程.

ruby arrays out-of-memory ruby-2.1

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