小编Bri*_*313的帖子

Grunticon&TravisCI

当Grunticon被安装到TravisCI上的Rails 4引擎时,我们遇到了一个问题.我很感激任何想法:

  • 在Rails中安装Grunticon的路径更短
  • TravisCI在我们的构建期间跳过安装Grunticon的方法(我们不需要它进行测试)
  • 一种在TravisCI上升级npm的方法(有传言说npm v3可以解决这个问题)

Travis出错:

    Gem::Package::TooLongFileName: File "node_modules/grunt-grunticon/node_modules/grunticon-lib/node_modules/directory-colorfy/node_modules/phantomjs/node_modules/fs-extra/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile" has a too long path (should be 256 or less)
    An error occurred while installing trusty-convoy-extension (0.0.3), and Bundler
    cannot continue.

    Make sure that `gem install trusty-convoy-extension -v '0.0.3'` succeeds before
    bundling.

    The command "eval bundle install --jobs=3 --retry=3 --deployment --path=${BUNDLE_PATH:-vendor/bundle}" failed. Retrying, 2 of 3.
Run Code Online (Sandbox Code Playgroud)

在我们的根目录中使用Gruntfile.js安装Grunticon.这会触发node_modules目录中的脚本.我们遵循了这个指南:https://github.com/filamentgroup/grunticon

谢谢!

更新:在TravisCI上成功安装npm 3.

before_install:
  - npm install -g npm@3.x-latest
Run Code Online (Sandbox Code Playgroud)

可悲的是,没有解决这个问题.

ruby-on-rails node.js npm travis-ci

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

在Rails滚动部署中使用带有CDN的散列资产

我们正在运行Rails 5.1站点,该站点利用Asset Pipeline在部署时生成散列(指纹)资产.为了优化性能,我们的资产是从服务器生成的,然后在首次请求时缓存到AWS Cloudfront.

部署时,我们进行滚动部署.我们使用新代码启动新服务器,并使用旧代码终止服务器,因为新代码已联机.在部署期间的任何给定时间,如果请求进入资产,则任何服务器(新的或旧的)都可以应答请求,因为它们都在同一AWS Application Load Balancer上.

例如,我们有两个资产文件:

  • admin-2d1d6c00a49c.js(从旧提交生成)
  • admin-aac83de85860.js(从新提交部署生成)

如果admin-aac83de85860.js的请求进入并且旧服务器接收请求,则它将找不到资产,返回400然后返回该响应缓存.这意味着即使新服务器拥有该文件,所有将来对admin-aac83de85860.js的请求都将返回400.

我们如何获得在AWS Cloudfront中缓存的两组资产,或者仅将新资产的流量直接添加到添加到池中的新服务器?

ruby-on-rails cdn amazon-web-services asset-pipeline amazon-cloudfront

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

Ruby 2.3.1的OpenStruct问题

在Ruby 2.1.5和2.2.4中,创建一个新的收集器会返回正确的结果.

require 'ostruct'
module ResourceResponses
  class Collector < OpenStruct
    def initialize
      super
      @table = Hash.new {|h,k| h[k] = Response.new }
    end
  end

  class Response
    attr_reader :publish_formats, :publish_block, :blocks, :block_order
    def initialize
      @publish_formats = []
      @blocks = {}
      @block_order = []
    end
  end  
end

 > Collector.new
 => #<ResourceResponses::Collector>
 Collector.new.responses
 => #<ResourceResponses::Response:0x007fb3f409ae98 @block_order=[], @blocks=  {}, @publish_formats=[]>
Run Code Online (Sandbox Code Playgroud)

当我升级到Ruby 2.3.1时,它开始返回nil而不是.

> Collector.new
=> #<ResourceResponses::Collector>
> Collector.new.responses
=> nil
Run Code Online (Sandbox Code Playgroud)

我已经做了很多关于OpenStruct如何在2.3中快10倍的阅读但是我没有看到会破坏收集器和响应之间关系的改变.非常感谢任何帮助.Rails的版本是4.2.7.1.

ruby ruby-on-rails openstruct ruby-2.3.1

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

Ruby版本不在rbenv的ruby-build列表中

我正在使用Rails 4.2,也想使用rbenv更新我的Ruby版本。

我使用Homebrew来安装ruby-build,无论我尝试通过多少次更新brew,运行时Ruby 2.1.3版都不会显示rbenv install --list

ruby rbenv

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

按哈希中的数组元素分组,计算计数

我有一个Ruby哈希:

example = {
  :key1  => [1, 1, 4],
  :key2  => [1, 2, 3],
  :key3  => [1, 3, 2],
  :key4  => [1, 5, 0],
  :key5  => [1, 7, 2],
  :key6  => [2, 1, 5],
  :key7  => [2, 2, 4],
  :key8  => [2, 4, 2],
  :key9  => [3, 1, 6],
  :key10 => [3, 2, 5],
  :key11 => [3, 3, 4]
}
Run Code Online (Sandbox Code Playgroud)

如何通过值的数组中的第一个元素对哈希进行分组?分组后,如何计算每个组的数量并将其存储到其他哈希中?

group_by如果我能够提取计数,我愿意跳过这部分.

示例所需输出:

groups = {:group1 => 5, :group2 => 3, :group3 => 3}
Run Code Online (Sandbox Code Playgroud)

ruby arrays hash group-by

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