小编dns*_*nsh的帖子

如何从rails活动记录查询中提取"as alias_name"

我有这个问题:

Client.select("name as dname")
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

Client.select("name as dname").first.dname
=> "Google"
Run Code Online (Sandbox Code Playgroud)

现在我想将所有dnames作为数组,但是pluck方法不起作用,因为dname不是列名.

2.2.5 :040 > Client.select("name as dname").pluck(:dname)
   (0.6ms)  SELECT dname FROM "clients"
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column "dname" does not exist
Run Code Online (Sandbox Code Playgroud)

如何获取dnames数组?是否有像pluck这样的方法可以使用as定义的列名别名.

我可以做这个

Client.select("name as dname").map{|d| d.dname}
Run Code Online (Sandbox Code Playgroud)

但循环遍历每条记录对我来说没有任何意义

sql postgresql activerecord ruby-on-rails ruby-on-rails-4

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

Rails 5 中的弃用警告

每次执行测试时,都会收到以下弃用警告:

DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super. (called from <top (required)> at /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)
DEPRECATION WARNING: alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super. (called from <top (required)> at /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)
DEPRECATION WARNING: after_filter is deprecated and will be removed in Rails 5.1. Use after_action instead. (called from <top (required)> at /Users/johnvanarkelen/Documents/Web development/rails/test-eagle/config/environment.rb:5)
Run Code Online (Sandbox Code Playgroud)

当我检查第 5 行时config/environment.rb,有以下代码: …

ruby-on-rails ruby-on-rails-5

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

git获取具有指定前缀的分支

我在远程起源有以下分支.

ft_d_feature_abc
ft_d_feature_xyz
ft_d_feature_lam
ft_d_feature_ton
ft_m_feature_mak
ft_m_feature_echo
ft_m_feature_laa
ft_m_feature_pol
Run Code Online (Sandbox Code Playgroud)

我想要获取以ft_d.开头的分支.我怎样才能实现这一目标git fetch?我的Git版本是1.7.9.5.

git git-fetch git-branch

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

Spring阻止Rails控制台运行

我最近将Ruby升级到2.5.0.从那以后,我无法正确运行Rails控制台.它要么无限期挂起,要么在几秒钟后向我显示此错误:

before_session hook failed: NoMethodError: undefined method `reject!' for nil:NilClass

完整错误:

Running via Spring preloader in process 6102
Loading development environment (Rails 5.1.4)
before_session hook failed: NoMethodError: undefined method `reject!' for nil:NilClass
Traceback (most recent call last):
/Users/zoro/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/spring-2.0.2/lib/spring/application.rb:171:in `fork': undefined method `reject!' for nil:NilClass (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

如果我DISABLE_SPRING,我可以按预期启动我的控制台.但是,(不确定这是否相关,如果不是 - 我可以单独解决)如果发生任何错误,控制台"崩溃"并将我踢回终端:

?rails console
Loading development environment (Rails 5.1.4)
[1] pry(main)> a
Traceback (most recent call last):
bin/rails: undefined method `[]' for nil:NilClass (NoMethodError)
?
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将不胜感激.使用rbenv来管理Rubies,并且在其他版本的Ruby上没有此错误.

ruby ruby-on-rails rails-spring

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

使用Delayed_Job发送电子邮件

我有我认为是通过发送电子邮件的工作设置Delayed_Job.但是,我还没有收到我的测试电子邮件,等待更多的事情发生延迟几天是不切实际的.我需要弄明白:

  1. 导致电子邮件不发送的错误是什么.
  2. 如何在不等待几天的情况下进行测试.

我是Delayed_Job新手,所以原谅新手的错误.

这是包含该send_reminder_emails方法的模型.它们完全没有功能.delay(run_at: self.mail_date),所以至少我知道它有多大功能:

class Reminder < ActiveRecord::Base
  belongs_to :user
  before_save :create_mail_date
  after_save :send_reminder_emails
  extend FriendlyId
  friendly_id :name, use: [:slugged, :finders]

  def create_mail_date
    @schedule = IceCube::Schedule.new(self.date)
    case self.repeating
    when "Weekly"
        @schedule.add_recurrence_rule(
            IceCube::Rule.weekly
        )
    when "Monthly"
        @schedule.add_recurrence_rule(
            IceCube::Rule.monthly.day_of_month(self.date.mon)
        )
    when "Yearly"
        @schedule.add_recurrence_rule(
            IceCube::Rule.yearly.day_of_year(self.date.yday)
        )
    end
    if self.repeating
        self.date = @schedule.next_occurrence(Time.now)
    end
    self.mail_date = self.date - 7.days
  end

  private

  def send_reminder_emails
      if self.reminder
         ReminderMailer.delay(run_at: self.mail_date).reminder_send(self.user, self).deliver_now
         self.create_mail_date
     end
  end
  handle_asynchronously :send_reminder_emails

end …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionmailer delayed-job

6
推荐指数
2
解决办法
2965
查看次数

heroku postgres 如何使用 0 字节的 RAM

在 heroku postgres 计划页面https://elements.heroku.com/addons/heroku-postgresql 上,提到业余计划有 0 字节的 RAM。这是否意味着 Postgres 在没有 RAM 的情况下工作?

postgresql heroku

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

使用 Postgres 逻辑复制槽时如何限制 WAL 大小?

我正在创建复制槽,并通过 JDBC 驱动程序将更改从 AWS Postgres RDS 流式传输到 java 进程。

我的复制槽创建代码如下所示。

final ReplicationSlotInfo replicationSlotInfo = pgConnection.getReplicationAPI()
                    .createReplicationSlot()
                    .logical()
                    .withSlotName(replicationSlotName)
                    .withOutputPlugin("wal2json")
                    .make();
Run Code Online (Sandbox Code Playgroud)

我使用以下代码获得复制流。

pgConnection.getReplicationAPI()
                .replicationStream()
                .logical()
                .withSlotName(replicationSlotName)
                .withSlotOption("include-xids", true)
                .withSlotOption("include-timestamp", true)
                .withSlotOption("pretty-print", false)
                .withSlotOption("add-tables", "public.users")
                .withStatusInterval(10, TimeUnit.SECONDS)
                .start()
Run Code Online (Sandbox Code Playgroud)

当复制器 java 进程未运行时,WAL 大小会增加。这是我用来查找复制滞后的查询。

SELECT
    slot_name,
    pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(), restart_lsn)) AS replicationSlotLag,
    active
FROM
    pg_replication_slots;
Run Code Online (Sandbox Code Playgroud)

输出:

slot_name   replicationslotlag  active
data_stream_slot    100 GB  f
Run Code Online (Sandbox Code Playgroud)

这种复制延迟会超过 RDS 磁盘,从而导致 RDS 关闭。

我以为wal_keep_segments会处理这个问题,它被设置为 32。但它不起作用。即使 Java 复制进程未运行,我是否还必须设置任何其他属性来避免这种情况。

postgresql replication jdbc logical-replication

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

如何在 envoy 代理中设置 Hash Key 值以实现 RING_HASH 负载平衡

我正在尝试根据某些请求标头在特使代理上设置 RING_HASH 负载平衡。从文档看来我必须在中设置哈希键filter_metadata

filter_metadata:
    envoy.lb:
      hash_key: "YOUR HASH KEY"
Run Code Online (Sandbox Code Playgroud)

但是,我无法找出 hash_key 的可能值/表达式是什么。我尝试为哈希键配置固定值,但请求仍然不会发送到同一上游服务器。

我的envoy.yaml

admin:
  address:
    socket_address: { address: 0.0.0.0, port_value: 9901 }

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 10000 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: some_service }
          http_filters:
          - name: envoy.filters.http.router

  clusters:
  - name: …
Run Code Online (Sandbox Code Playgroud)

load-balancing envoyproxy

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