我有一个Rails 3集成测试,测试我的路线.它包含以下测试:
assert_routing(
"/#{@category.url.path}/#{@foo.url.path}",
{ :controller => 'foo', :action => 'show', :category => @category.to_param, :foo => @foo.to_param }
)
Run Code Online (Sandbox Code Playgroud)
我还想测试一个没有路由匹配的情况.显然,测试生成在这种情况下没有意义,所以我只需要assert_recognizes的反转.我希望能够做到这样的事情:
assert_not_recognized('/adfhkljkdhasjklhjkldfahsjkhdf')
Run Code Online (Sandbox Code Playgroud)
任何想法,缺少在assert_raises块中包装assert_recognizes(实际上并不是那么可怕,现在我想到了它)?
我在MySQL 5的查询中可以使用的绑定变量数是否有限制?我认为有,但我在参考手册或谷歌搜索中找不到任何信息.
我能找到的唯一提供任何信息的东西都在C API参考中:http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-bind-result.html
这似乎意味着记忆是唯一的限制,但这似乎有点怀疑.
更新:有一个限制!
runner.rb:47: data_replicator.rb:312:in `prepare': Prepared statement contains too many placeholders (Mysql::Error)
from data_replicator.rb:312:in `set_statement_handle_for'
from data_replicator.rb:287:in `log_query'
from data_replicator.rb:221:in `replicate_table'
from data_replicator.rb:93:in `replicate'
from data_replicator.rb:20:in `run'
Run Code Online (Sandbox Code Playgroud)
这给了我一些更好的搜索!
这真的很奇怪:
: josh@josh; wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.bz2
: josh@josh; tar xvjf ruby-1.8.7.tar.bz2
: josh@josh; cd ruby-1.8.7/
: josh@josh; CFLAGS='-O0 -g -Wall' ./configure --disable-pthread
: josh@josh; make
gcc -O0 -g -Wall -DRUBY_EXPORT -D_GNU_SOURCE=1 -I. -I. -c array.c
[...]
gcc -O0 -g -Wall -DRUBY_EXPORT -D_GNU_SOURCE=1 -I. -I. -c math.c
math.c: In function ‘domain_check’:
math.c:37: error: missing binary operator before token "("
make: *** [math.o] Error 1
Run Code Online (Sandbox Code Playgroud)
果然,math.c无法编译:
: josh@josh; gcc -O0 -g -Wall -DRUBY_EXPORT -D_GNU_SOURCE=1 -I. -I. -c math.c
math.c: In function ‘domain_check’:
math.c:37: …Run Code Online (Sandbox Code Playgroud) 我正在编写Rails迁移来创建表:
create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table|
table.timestamps
table.string :country_tld
end
Run Code Online (Sandbox Code Playgroud)
这导致下表:
CREATE TABLE `sites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`country_tld` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://foo:bar@localhost/baz/sites'
Run Code Online (Sandbox Code Playgroud)
可悲的是,我的外国数据源使用旧式Rails updated_on和created_on列作为其时间戳.当然,我可以解决这个问题:
create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table|
table.datetime :created_on, :updated_on
table.string :country_tld
end
Run Code Online (Sandbox Code Playgroud)
如果仍然有一种琐碎的方式来使用时间戳并获得我想要的行为,我很乐意听到它.不,我不认为猴子修补ActiveRecord::Timestamp是一种琐碎的方式,考虑到这只会影响一次迁移.;)
我想手动设置部署在AWS Elastic Beanstalk上的Docker容器的主机名.您可以在启动容器时设置主机名docker run -h HOSTNAME,但我无法弄清楚如何(或者甚至)将自定义参数传递给docker run命令.
该Dockerrun.aws.json文件似乎是一个可能的候选人,但没有记录的键是做我想做的.
有谁知道这是否可能?
注意:我使用的是我在使用libxml-ruby gem时遇到的段错误来说明问题,但我已经修复了我的问题.这个问题的真正意义在于从gdb和核心文件中查看Ruby回溯(即解释器在Ruby代码无法处理异常时打印的内容),解释器本身遇到分段错误.
在生成XML文档的过程中,我遇到了一个奇怪的段错误:
/railsroot/vendor/isolated/ruby-1.8/gems/libxml-ruby-1.1.2/lib/libxml/node.rb:123: [BUG] Segmentation fault
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2011.03
Aborted
Run Code Online (Sandbox Code Playgroud)
更新1:这也是在vanilla Ruby(MRI)下的段错误.
我已经打开了corefiles并查看了gdb中的backtrace(参见问题的结尾).我可以看到解释器崩溃的地方,谷歌搜索导致了许多有希望的结果.除了解释器回溯之外,我想看到的是Ruby代码本身的回溯(即从解释器的角度来看的回溯).
我希望在gdb中加载核心将允许我调用一些解释器函数来打印出解释代码的堆栈.
有任何想法吗?
对于好奇的人来说,这是核心和回溯:
: foo@bar; ulimit -c unlimited
: foo@bar; RAILS_ENV=production ./script/runner script/feeds/batchfeed.rb --config config/feeds/$feed.yml --timer /tmp/$feed.timer --gzip --output /tmp/$feed.xml.gz
/railsroot/vendor/isolated/ruby-1.8/gems/libxml-ruby-1.1.2/lib/libxml/node.rb:123: [BUG] Segmentation fault
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2011.03
Aborted
: foo@bar; ls -l core
-rw------- 1 rails rails 145301504 2011-03-04 08:34 core
: …Run Code Online (Sandbox Code Playgroud) 运行创建索引的Rails迁移时,我得到:
Mysql::Error: Specified key was too long; max key length is 1000 bytes: CREATE UNIQUE INDEX `index_matches_on_foo_and_bar_id_and_baz_id` ON `matches` (`foo`, `bar_id`, `baz_id`)
Run Code Online (Sandbox Code Playgroud)
我需要设置什么MySQL变量来增加它,我在哪里设置它以便它影响所有会话,而不仅仅是当前的客户端会话?
我有一个Rails模型,其属性是一个正则表达式.是否有一种标准方法可以在保存之前验证属性的值是否为有效的正则表达式?
更新:根据接受的答案,这是我做的:
class Foo < ActiveRecord::Base
validates_each :bar do |model, attr, value|
begin
Regexp.compile value
rescue RegexpError => e
model.errors.add attr, "not a valid regular expression: #{e.message}"
end
end
# [...]
end
Run Code Online (Sandbox Code Playgroud) 我有一个函数,它从一个集合中获取n个随机项,使得相同的项永远不会被选中两次.我很容易完成这件事:
(defn take-rand [n coll]
(take n (shuffle coll)))
Run Code Online (Sandbox Code Playgroud)
但是我有一个令人讨厌的要求,即当提供相同的种子时,我需要返回相同的随机子集,即
(defn take-rand [n coll & [seed]] )
(take-rand 5 (range 10) 42L) ;=> (2 5 8 6 7)
(take-rand 5 (range 10) 42L) ;=> (2 5 8 6 7)
(take-rand 5 (range 10) 27L) ;=> (7 6 9 1 3)
(take-rand 5 (range 10)) ;=> (9 7 8 5 0)
Run Code Online (Sandbox Code Playgroud)
我有一个解决方案,但它感觉有点笨重,而不是非常惯用.任何Clojure老兵都可以提出改进(或完全不同的方法)吗?
这是我做的:
(defn take-rand
"Returns n randomly selected items from coll, or all items if there are fewer than n. …Run Code Online (Sandbox Code Playgroud) 在Google Play开发者控制台中发布应用时,我添加了一个简短的英文说明.我正在将应用分发给所有国家/地区,Google似乎会自动翻译简短说明文字.这基本上很有帮助,但描述中包含了一些我不想翻译的短语.是否可以通过用引号或类似的东西包围它们来阻止特定短语的翻译?
ruby ×3
mysql ×2
android ×1
backtrace ×1
clojure ×1
coredump ×1
docker ×1
gcc ×1
gdb ×1
google-play ×1
regex ×1
testing ×1
url-routing ×1
validation ×1