我刚开始使用HerokuCI.我有几个Selenium测试,所以我已经添加了buildpacks app.json
.
{
"buildpacks": [
{ "url": "heroku/ruby" }
],
"environments": {
"test": {
"addons": ["heroku-postgresql:in-dyno", "heroku-redis:in-dyno"],
"buildpacks": [
{ "url": "heroku/ruby" },
{ "url": "https://github.com/notvad/heroku-buildpack-selenium" },
{ "url": "https://github.com/heroku/heroku-buildpack-chromedriver" },
{ "url": "https://github.com/heroku/heroku-buildpack-google-chrome" }
],
"env": {
"REDIS_PROVIDER": "REDIS_URL",
"RAILS_ENV": "test",
"RACK_ENV": "test",
"MALLOC_ARENA_MAX": 2,
"LANG": "en_US.UTF-8",
"TEST_API": 1
},
"scripts": {
"test-setup": "./bin/setup-cc-test-reporter",
"test": "./bin/test-with-cc-test-reporter"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些不断重建以及所有依赖项.
-----> Selenium app detected
bash: /tmp/buildpacks/b5ae60a477f2ba582d00a4ba23348059d40dea69cea6d982947f7c6afa72d2b8d69252449d43cbcf97a23341fd57300a3fef3224ace95482e1c0deaf8a844e4d/export: No such file or directory
bash: /tmp/buildpacks/b7af5642714be4eddaa5f35e2b4c36176b839b4abcd9bfe57ee71c358d71152b4fd2cf925c5b6e6816adee359c4f0f966b663a7f8649b0729509d510091abc07/export: No such file or …
Run Code Online (Sandbox Code Playgroud) Ruby和Postgres的排序略有不同,这在我的项目中引起了细微的问题。有两个问题:重音字符和空格。看起来Ruby正在按ASCII进行排序,而Postgres正在使用适当的Unicode排序算法进行排序。
Heroku Postgres 11.2。数据库排序规则为en_US.UTF-8
。
psql (11.3, server 11.2 (Ubuntu 11.2-1.pgdg16.04+1))
...
=> select 'quia et' > 'qui qui';
?column?
----------
f
(1 row)
=> select 'quib' > 'qüia';
?column?
----------
t
(1 row)
Run Code Online (Sandbox Code Playgroud)
Heroku上的Ruby 2.4.4。
Loading production environment (Rails 5.2.2.1)
[1] pry(main)> 'quia et' > 'qui qui'
=> true
[2] pry(main)> 'quib' > 'qüia'
=> false
[3] pry(main)> ENV['LANG']
=> "en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)
我可以修复重音字符的处理,但是我无法让Ruby正确处理空格。例如,这是他们对相同列表进行排序的方式。
Postgres: ["hic et illum", "quia et ipsa", "qui qui non"]
Ruby: ["hic et illum", …
Run Code Online (Sandbox Code Playgroud) 我想使用git来管理远程服务器上的一些数据,所以我在那里设置了一个非裸存储库.我可以毫无问题地推送它,并且存储库本身会更新,但实际文件不会被更改/添加/删除.我必须ssh到服务器并做一个
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)
获取文件结构以实际更新.
该怎么办?
我有一种情况,我想缓存一些计算以供以后使用.假设我有一个允许值列表.由于我将要检查该列表中是否有任何内容,因此我希望将其作为效率和便利的哈希.否则我必须要grep.
如果我正在使用Moose,那么每次更改允许值列表时重新计算缓存都会很好.我能用触发器轻松做到这一点......
has allowed_values => (
is => 'rw',
isa => 'ArrayRef',
trigger => sub {
my %hash = map { $_ => 1 } @{$_[1]};
$_[0]->allowed_values_cache(\%hash);
}
);
has allowed_values_cache => (
is => 'rw',
isa => 'HashRef',
);
Run Code Online (Sandbox Code Playgroud)
两者将保持同步......
$obj->allowed_values([qw(up down left right)]);
print keys %{ $obj->allowed_values_cache }; # up down left right
Run Code Online (Sandbox Code Playgroud)
现在让我们说我想要一个默认值allowed_values
,简单的变化......
has allowed_values => (
is => 'rw',
isa => 'ArrayRef',
trigger => sub {
my %hash = map { $_ => 1 …
Run Code Online (Sandbox Code Playgroud) 文件句柄上的utf8编译指示和utf8编码让我感到困惑.例如,这个看似简单明了的代码......
use utf8;
print qq[fü];
Run Code Online (Sandbox Code Playgroud)
要清楚,"fü"上的十六进制转储66 c3 bc
,如果我没有弄错,那就是正确的UTF8.
打印66 fc
的不是UTF8,而是Unicode或Latin-1.关掉use utf8
,我明白了66 c3 bc
.这与我的期望相反.
现在让我们添加filehandle pramgas.
use utf8;
binmode *STDOUT, ':encoding(utf8)';
print qq[fü];
Run Code Online (Sandbox Code Playgroud)
现在我明白了66 c3 bc
.但删除use utf8
,我得到的66 c3 83 c2 bc
对我没有任何意义.
用UTF8制作我的代码DWIM是正确的做法吗?
PS我的语言环境设置为"en_US.UTF-8"和Perl 5.10.1.
我需要能够在动作可能会死的词块中添加动作.而且我需要正常抛出异常并且能够被正常捕获.
不幸的是,在DESTROY期间Perl特殊情况例外通过在消息中添加"(清理)"并使它们无法覆盖.例如:
{
package Guard;
use strict;
use warnings;
sub new {
my $class = shift;
my $code = shift;
return bless $code, $class;
}
sub DESTROY {
my $self = shift;
$self->();
}
}
use Test::More tests => 2;
my $guard_triggered = 0;
ok !eval {
my $guard = Guard->new(
#line 24
sub {
$guard_triggered++;
die "En guarde!"
}
);
1;
}, "the guard died";
is $@, "En guarde! at $@ line 24\n", "with the right error message";
is …
Run Code Online (Sandbox Code Playgroud) 我偶尔会看到Perl5i被提及.它看起来很棒,让事情变得更容易.一些问题:
该模块是否与其他模块兼容,例如Dancer,Mojolicious,XML :: RSS等?
它与Moose兼容,还是具有更好的OO功能?
它包装了最好的CPAN模块,如果我的脚本使用这些...
use strict;
use utf8::all;
use XML::RSS::JavaScript;
use DateTime::Format::Mail;
Run Code Online (Sandbox Code Playgroud)
......我应该用以下代替它:
use perl5i::2;
use XML::RSS::JavaScript;
use DateTime::Format::Mail;
Run Code Online (Sandbox Code Playgroud)任何经验,好的和坏的,请分享.
我有这个规范来检查预期的数量:
expect(animal_cost).to eq(0.7771118644067795e5)
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
expected: 77711.18644067795
got: 0.7771118644067795e5
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我得到的数字与我预期的相同,所以我很困惑为什么会失败。如何设置规格?
animal_cost.class
是一个 BigDecimal。
在C中,我经常想要以相同的方式处理从文件读取的数据和从字符串数组中读取的数据.通常从文件读取是用于生产,而字符串用于测试.我最后写了很多像这样的代码:
void handle_line(char *line, Things *things) {
...
}
Things *read_from_chars(char *lines[]) {
Things *things = Things_new();
for (int i = 0; lines[i] != NULL; i++) {
handle_line(lines[i], things);
}
return things;
}
Things *read_from_input(FILE *input) {
char *line = NULL;
size_t linelen = 0;
Things *things = Things_new();
while (getline(&line, &linelen, input) > 0) {
handle_line(line, things);
}
return things;
}
Run Code Online (Sandbox Code Playgroud)
这是一种重复的努力.
有没有办法让一个字符串数组伪装成FILE *
指针?或相反亦然?或者是否有更好的模式来处理这个问题?
对于奖励积分:解决方案应该与标准文件函数一样char *
或char **
可用,如fgets
和getline
.
例如,我有一个这样的项目
[ID]--[Date]-------[Commit message]-------[Author]
[5]--[Today]-------[Update Feature A]-----[Michael]
[4]--[Yesterday]---[Add Feature Y]--------[Tom]
[3]--[1 day ago]---[Add Feature X]--------[Dick]
[2]--[2 days ago]--[Add feature A]--------[Michael]
[1]--[3 days ago]--[First commit]---------[Michael]
Run Code Online (Sandbox Code Playgroud)
我正在使用 Git 扩展,但找不到仅查看作者 Michael 的差异的方法。
例如,我只想查看功能 A 的更改代码,当我单击提交 1 和 2 时,我可以看到这些提交之间的差异。但是,当我过滤作者 [Michael] 并单击 1 和 5 时,我希望仅看到作者 [Michael] 的所有差异 - 但也有 [Tom] 和 [Dick] 的差异。
有什么方法可以查看作者的所有代码更改吗?我不在乎我使用哪个工具(例如 SourceTree、Git Extensions,...)