小编Gab*_*azo的帖子

有没有办法优雅地更改rails secret_key_base?

假设我们想要更改我们的Rails应用程序secret_key_base.有没有办法不立即注销所有用户?

当从Rails的3.2升级到4,从相应的变化secret_tokensecret_key_base,轨道由他们来到工地更新新用户的Cookie与迁移帮助.一旦很多用户访问过,您可以secret_key_base专门切换到不登出用户.

是否有这种功能可以改变secret_key_base一般情况,比如开发人员离开或类似的东西?我们的想法是设置一个新的secret_key_base,用于在用户访问网站时切换用户的cookie.一旦有好的比例访问过,你可以进行硬切换并删除旧的secret_key_base.

我发现一个旧的rails pull请求似乎从这个功能开始,但它们似乎已经停止了它.

ruby-on-rails

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

Heroku PGBackups附加组件:为什么选择除了免费的一个月保留选项之外的任何东西?

我正在研究我们的Heroku rails应用程序的数据库备份选项,看起来免费的PGBackups附加组件可以正常工作.

但是,我对选项感到困惑.他们是:

Basic - 2 manual back-ups
Plus - 7 manual back-ups
Auto One Week - 7 automatic daily and 2 manual
Auto One Month - 7 automatic daily, 5 automatic weekly, 10 manual
Run Code Online (Sandbox Code Playgroud)

他们都是自由的.我必须在这里遗漏一些东西,因为我不明白为什么你会选择除了最后一个选项.我缺少一个缺点吗?我应该在这里权衡利弊是什么?

heroku

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

可以跳过update_attributes上的验证吗?

这似乎是一个愚蠢的问题,但我无法在任何地方找到答案!

是否可以update_attributes()跳过验证,例如save(validate: false)

我有一个很长的表单,有一些冗长的text(非string)字段,我想让用户能够在表单上保存他们的进度.通常情况下,我需要在答案之前对答案进行最小长度等等,然后才能提交并继续进行,但在他们只是点击"保存"的情况下,我想把他们所做的任何进展放在数据库,以便他们可以回来并在以后完成.有没有办法在这种情况下跳过验证?

从环顾四周看,我唯一可以做的就是单独枚举每个字段,如下所示:

@obj.field1 = ...
@obj.field2 = ...
@obj.field3 = ...
...
@obj.save(:validate => false)
Run Code Online (Sandbox Code Playgroud)

那是真的吗?我担心将来某个时候添加另一个字段而忘记在这里更新控制器.

activerecord ruby-on-rails ruby-on-rails-3

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

如何将弹性IP与Fargate容器相关联?

我正在探索为我的ECS容器使用新的Fargate选项.一个限制是必须始终可以在同一公共IP地址访问正在运行的任务.

我的第一个想法是分配一个弹性IP,但我无法分辨它与之相关联.似乎弹性IP可以与实例(与Fargate无关)或网络接口相关联.但是,如果我将它与ENI关联,我无法看到如何确保我的任务的容器具有该网络接口.创建服务时,我发现我可以把它放在VPC中,但就是这样.

从实验,如果我杀了一个任务,这样的服务会重新启动一个新的,或者如果我更新服务运行新任务的修订 - 启动运行新的任务将有一个新的ENI每次容器.

有没有办法确保给定服务具有相同的公共IP地址,即使其任务被杀死并重新启动?

amazon-web-services aws-fargate

12
推荐指数
2
解决办法
4007
查看次数

为什么故意不正确地使用strcpy不会失败呢?

为什么以下C代码使用strcpy对我来说很好?我尝试以两种方式使其失败:

1)我尝试strcpy从字符串文字到分配的内存太小而不能包含它.它复制了整件事并且没有抱怨.

2)我尝试strcpy了一个未被NUL终止的数组.在strcpyprintf工作就好了.我原本以为strcpy复制了chars直到NUL找到了,但没有一个存在,它仍然停止.

为什么不这些失败?我是以某种方式获得"幸运",还是我误解了这个功能是如何工作的?它是特定于我的平台(OS X Lion),还是大多数现代平台以这种方式工作?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char *src1 = "123456789";
    char *dst1 = (char *)malloc( 5 );

    char src2[5] = {'h','e','l','l','o'};
    char *dst2 = (char *)malloc( 6 );

    printf("src1: %s\n", src1);
    strcpy(dst1, src1);
    printf("dst1: %s\n", dst1);
    strcpy(dst2, src2);
    printf("src2: %s\n", src2);
    dst2[5] = '\0';
    printf("dst2: %s\n", dst2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行此代码的输出是:

$ ./a.out …
Run Code Online (Sandbox Code Playgroud)

c malloc strcpy

11
推荐指数
2
解决办法
1410
查看次数

Rails/Rack:POST数据的"ArgumentError:invalid%-encoding"

我们的ruby on rails站点有一个URI,我们的合作伙伴之一将XML数据发送到.

由于我们不想处理XML,因此我们只是将原始数据填充到数据库列中,并且不再进行处理.

但是,我们收到的其中一个帖子在airbrake中给了我们这个错误:

ArgumentError: invalid %-encoding ("http://ns.hr-xml.org/2004-08-02" 
userId="" password=""><BackgroundReportPackage type="report">
<ProviderReferenceId>....
Run Code Online (Sandbox Code Playgroud)

使用回溯:

vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:898:in `decode_www_form_component'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/utils.rb:41:in `unescape'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/utils.rb:94:in `block (2 levels) in parse_nested_query'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/utils.rb:94:in `map'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/utils.rb:94:in `block in parse_nested_query'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/utils.rb:93:in `each'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/utils.rb:93:in `parse_nested_query'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/request.rb:332:in `parse_query'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/request.rb:209:in `POST'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/methodoverride.rb:26:in `method_override'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/methodoverride.rb:14:in `call'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/runtime.rb:17:in `call'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/lock.rb:15:in `call'
vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_dispatch/middleware/static.rb:63:in `call'
vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:136:in `forward'
vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:143:in `pass'
vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:155:in `invalidate'
vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:71:in `call!'
vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:51:in `call'
vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/engine.rb:479:in `call'
vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:223:in `call'
vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/railtie/configurable.rb:30:in `method_missing'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/deflater.rb:13:in `call'
vendor/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/content_length.rb:14:in `call'
vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/rack/log_tailer.rb:17:in `call'
vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:80:in `block in pre_process'
vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:78:in `catch'
vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:78:in `pre_process' …
Run Code Online (Sandbox Code Playgroud)

rack ruby-on-rails-3 ruby-1.9.3

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

ruby open-uri HTTP Streaming是否会限制下载或保存到临时文件?

我在服务器上有一个大的CSV文件,我想要下载并处理成块,而不是将整个内容读入内存.经过一段时间的讨论,我想出了这个:

require open-uri

open("http://example.com/#{LARGE_CSV_FILE}") do |file|
  file.each_slice(50_000) do |fifty_thousand_lines|
    MyModel.import fifty_thousand_lines.join
  end
end
Run Code Online (Sandbox Code Playgroud)

我的理解是open-uri#open将包裹HTTP GET和返回IO式的枚举对象.#each_slice(n)将块一次传递一行n行.然后我加入并处理这些行.

这导入很好,并且看着我的OS X iStat菜单,看起来ruby进程的内存使用情况不会失控.但是,看起来我立刻下载了所有文件.如果没有内存使用爆炸,这怎么可能?

ruby是否将其下载到临时文件中,然后逐行从磁盘读取它?我原本以为它open-uri会限制HTTP连接,只在其块完成处理其批量数据时才下载更多数据.

这是下载和处理文件而不将其全部加载到内存中的正确方法吗?

ruby open-uri

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