小编d3v*_*kit的帖子

Sidekiq部署到多个环境

(请参阅下面的详细配置,这是Henley Chiu回答的结果).

我一直试图将我的大脑包裹在Sidekiq部署,我并没有真正得到它.我在同一台服务器上有一个具有暂存环境和生产环境的应用程序.我所看到的关于sidekiq部署的所有内容基本上都说"只需将sidekiq/capistrano添加到您的部署文件中",所以我就这样做了.然后说明是"这里是带有选项的yml文件",但似乎没有解释.我需要命名空间吗?我在初始化文件中看到,但这似乎是指向服务器外部.

我之前部署过,每个阶段似乎都在适当的环境下启动sidekiq,但它们都从相同的队列进行处理.我的生产电子邮件试图由舞台sidekiq处理,并失败.我暂时停止了我的舞台,但最终我还需要再次使用它.我希望自己不会密集,我真的试图理解这一点,而且我很难找到一个明确的"这就是它的完成方式".

对于它的价值,这里是config/sidekiq.yml(在部署期间加载正常):

:concurrency: 5
:verbose: false
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
  - [carrierwave, 7]
  - [client_emails, 5]
  - [default, 3]
staging:
  :concurrency: 10
production:
  :concurrency: 25
Run Code Online (Sandbox Code Playgroud)

日志文件和pids似乎在正确的位置,但队列只是合并.任何帮助都会很棒!

此外,如果重要:

Rails 3.2.11, passenger, nginx, rvm, Ubuntu 12.10, and Ruby 1.9.3
Run Code Online (Sandbox Code Playgroud)

详细配置(答案):

首先,我在端口7777(或者除了默认的6379之外的任何端口)设置了一个新的redis服务器.几乎遵循我第一次使用的redis快速入门指南.

然后我制作了initilizer文件; 这有客户端和服务器配置.两者都需要使sidekiq工作多级.

请注意,我使用外部YAML文件进行设置.我正在使用SettingsLogic来简化操作,但您可以通过包含文件轻松地自己完成此操作.通过使用yaml文件,我们不必触摸我们的环境/登台或生产文件.

# config/initializers/sidekiq.rb
server = Settings.redis.server
port = Settings.redis.port
db_num = Settings.redis.db_num
namespace = Settings.redis.namespace

Sidekiq.configure_server do |config|  
  config.redis = { url: "redis://#{server}:#{port}/#{db_num}", namespace: namespace  }
end …
Run Code Online (Sandbox Code Playgroud)

deployment capistrano ruby-on-rails sidekiq

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

使用Her,Faraday在API中进行Rails分页

我一整天都试图解决这个问题,这让我发疯了.

我有两个rails应用程序,ServerApp和ClientApp.ClientApp使用Her gem通过API从ServerApp获取数据.在我需要分页信息之前,一切都很棒.

这是我用来获取订单的方法(这使用kamainari进行分页和搜索搜索):

# ServerApp
def search
  @search = Order.includes(:documents, :client).order('id desc').search(params[:q])
  @orders = @search.result(distinct: true).page(params[:page]).per(params[:per])

  respond_with @orders.as_json(include: :documents)
end
Run Code Online (Sandbox Code Playgroud)

它在json中返回一个哈希数组,Her用作订单的集合.这很好.

# Response
[
  {
    "client_id": 239,
    "created_at": "2013-05-15T15:37:03-07:00",
    "id": 2422,
    "ordered_at": "2013-05-15T15:37:03-07:00",
    "origin": "online",
    "updated_at": "2013-05-15T15:37:03-07:00",
    "documents": [
      { ... }
    ]
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

但我需要分页信息.看起来我需要将其作为元数据发送给我的json.所以我改变了对此的回应:

respond_to do |format|
  format.json do
    render json: { orders: @orders.as_json(include: :documents), metadata: 'sent' }
  end
end
Run Code Online (Sandbox Code Playgroud)

这确实发送了元数据,因此在我的ClientApp中,我可以编写@ orders.metadata并获取'sent'.但现在我的命令嵌套在'orders'中的数组中,所以我需要使用@ orders.orders,然后它将它视为数组而不是Her系列.

在做了一些阅读后,似乎通过标题发送分页信息是很多其他人这样做的方式(我能够使用本指南在after_filter中设置标题).但是我对如何在我的ClientApp中获取这些响应标头更加迷茫 - 我相信我需要一个法拉第中间件,但我只是没有运气让它工作.

如果有人知道我怎么能完成这件事,我将非常感激.我不能再花一天时间把头撞在墙上,但我觉得我只是解决这个问题的一个重要信息!

ruby json ruby-on-rails-3 faraday

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

Postgres 全文搜索按位置排名

我有一个电影表,我想搜索标题并返回最接近的匹配项。

我认为全文搜索可能有用,但它似乎无法按单词的位置排序,尽管 postgres 知道该位置。这在 postgres 中可能吗?

这是我的查询:

SELECT collectibles.id, collectibles.title, ts_rank_cd(to_tsvector('english', collectibles.title), plainto_tsquery('old school')) AS score
FROM collectibles WHERE to_tsvector('english', collectibles.title) @@ plainto_tsquery('old school')
ORDER BY score DESC;
Run Code Online (Sandbox Code Playgroud)

以下是一些结果:(这是我能想到的最好的格式,抱歉!)

id | title | score

 - 277568 | Wilson Meadows: Live At The 15th Old School & Blues Festival | 0.1
 - 3545 | 5 Film Collection: Will Ferrell: Campaign / Old School (Unrtated Version) / Blades Of Glory / Roxbury / Semi-Pro | 0.1
 - 10366 | Alice Cooper: Old …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search

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

最好的灵活rails密码安全实现

我需要实现具有各种灵活要求的密码安全性.这些要求基本上取自Sans密码策略:

强密码具有以下特征:

包含以下五个字符类中的至少三个:

  • 小写字符
  • 大写字符
  • 数字
  • 标点
  • "特殊"字符(例如@#$%^&*()_ + |〜 - =`{} []:";'<>/etc)
  • 包含至少十五个字母数字字符.

还有要求不允许用户电子邮件地址出现在密码中.

理想情况下,我想要一个可以处理这个问题的宝石 - 它会得到更广泛的测试和使用,而且我们不太可能有bug.

如果没有宝石涵盖这一点,那么处理这些要求的最佳和最强化的方法是什么?理想情况下,我们可以说我们不仅安全,而且安全,因为我们有行业标准的实施.

到目前为止我发现的宝石是:

  • 设计安全扩展,它有一个非常简单的正则表达式,用于检查是否有大写,小写和数字

  • 强密码,它只是提供熵检查,让用户知道他们的密码是否很强.

(我们正在使用Rails 3.2.17和Ruby 1.9.3,但是计划很快转向Rails 4和Ruby 2,因此也欢迎更新的解决方案).

ruby security passwords gem ruby-on-rails

5
推荐指数
2
解决办法
4455
查看次数

安装时如何从酶实例中获取 HOC 包裹的组件功能?

我有父 -> 子组件,子组件在componentDidMount. fetch 在父级之上的 redux 存储中设置状态,这会导致子组件以不同的方式显示。

子组件也在使用material-ui withStyles,因此它会在组件周围创建一个 HOC。

在我的测试中,我需要挂载父组件,找到子组件,然后看到 fetch 正确更改了状态并导致子组件更新。

到目前为止,我的解决方案是这样的:

  • 挂载父级,找到子级
  • 称呼 child.instance().fetchFunction().then(() => expect(..))

但是,调用instance()child返回HOC,所以我得到的错误:

child.instance(...).fetchFunction 不是函数

我见过的所有解决方案都使用shallowdive绕过 HOC,但是如果我使用,shallow我将不得不在测试中创建一个模拟存储,它实际上不会将其作为集成测试进行测试。

我可以测试单独的 fetch 调用,然后使用测试组件shallow并将 props 传递给它,就好像状态已更改一样,但这并不能证明它们都可以一起工作。

这是一个代码沙盒,我在其中重现了该问题:

编辑测试异步 componentDidMount

这是一些示例代码(基本上是代码和框):

App.js

import React from "react";
import Child from "./Child";

class App extends React.Component {
  render() {
    return <Child />;
  }
}

export default App;
Run Code Online (Sandbox Code Playgroud)

Child.js

import React from "react";
import { withStyles } …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs jestjs enzyme

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