我有一个遗留的Rails应用程序,我想升级到最近的Rails和Ruby版本.首先,我试图用Ruby 2.1.2设置应用程序
$ rails -v
Rails 2.3.18
$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [i686-linux]
Run Code Online (Sandbox Code Playgroud)
当我尝试运行rake任务时rake db:schema:load RAILS_ENV=test遇到错误
can not load translations from /activesupport-2.3.18/lib/active_support/locale/en.yml, the file type yml is not known
Run Code Online (Sandbox Code Playgroud)
通过Google搜索我发现以下参考https://github.com/rails/rails/issues/10514,其中提到Rails 2.3和Ruby 2+版本之间存在不兼容性.
任何人都可以帮我申请参考链接中提到的猴子补丁吗?
谢谢,Jignesh
我有一个需要使用插值动态创建unicode字符串的要求。例如,请参见以下在irb中试用的代码
2.1.2 :016 > hex = 0x0905
=> 2309
2.1.2 :017 > b = "\u#{hex}"
SyntaxError: (irb):17: invalid Unicode escape
b = "\u#{hex}"
Run Code Online (Sandbox Code Playgroud)
十六进制代码0x0905对应于DEVANAGARI字母A的独立元音的unicode。
我无法弄清楚如何达到期望的结果。
使用红宝石 2.2
我有如下字符串:
为了从上面显示的字符串中提取星期几,我编写了以下正则表达式:
/\b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\b/
Run Code Online (Sandbox Code Playgroud)
当尝试使用String#match实例方法时,match_data 不会返回所有匹配项。例如,请参考下面显示的 irb 输出,其中当字符串Weekly on Tuesday and Friday与上面显示的正则表达式匹配时,MatchData仅包含Tuesday. 我预计它也包含Friday。
2.2.1 :001 > str = "Weekly on Tuesday and Friday"
=> "Weekly on Tuesday and Friday"
2.2.1 :002 > regex = /\b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\b/
=> /\b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\b/
2.2.1 :003 > str.match(regex)
=> #<MatchData "Tuesday" 1:"Tuesday">
2.2.1 :004 > match_data = str.match(regex)
=> #<MatchData "Tuesday" 1:"Tuesday">
2.2.1 :005 > match_data.captures
=> ["Tuesday"]
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,当我在正则表达式中没有使用任何开始/结束锚点时,为什么 MatchData 只包含第一个匹配的术语?我确信我的正则表达式遗漏了一些东西,但我无法弄清楚。
笔记
以下是代码段:
模块:ActiveSupport ::关注
module ActiveSupport
module Concern
def self.extended(base)
base.instance_variable_set("@_dependencies", [])
end
def append_features(base)
if base.instance_variable_defined?("@_dependencies")
base.instance_variable_get("@_dependencies") << self
return false
else
return false if base < self
@_dependencies.each { |dep| base.send(:include, dep) }
super
base.extend const_get("ClassMethods") if const_defined?("ClassMethods")
base.send :include, const_get("InstanceMethods") if const_defined?("InstanceMethods")
base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block")
end
end
def included(base = nil, &block)
if base.nil?
@_included_block = block
else
super
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
自定义模块:GeneralScopes
module GeneralScopes
extend ActiveSupport::Concern
included do
scope :reverse_order_by_date, :order => "date DESC"
scope :recent, …Run Code Online (Sandbox Code Playgroud) Rails 3.2.9
Ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]
sidekiq 2.10.1
Run Code Online (Sandbox Code Playgroud)
如果我使用自定义队列名称定义下面的工作者
class BulkEmailWorker
include Sidekiq::Worker
# https://github.com/mperham/sidekiq/wiki/Advanced-Options
sidekiq_options(queue: :bulk_mails, backtrace: true)
# https://github.com/mperham/sidekiq/wiki/Best-Practices
# Section: Make your jobs small and simple
def perform
# https://github.com/mperham/sidekiq/wiki/Delayed-Extensions
scheduled_mails = MailTemplate.with_schedule
scheduled_mails.each do |mail_template|
BulkMailer.delay.general_mail(mail_template.id)
end
end
end
Run Code Online (Sandbox Code Playgroud)
我像这样调用这个工人:
BulkEmailWorker.perform_async
Run Code Online (Sandbox Code Playgroud)
它不起作用(换句话说,不发送电子邮件).
检查redis中的数据我发现如下:
redis 127.0.0.1:6379> keys *
1) "myapp:stat:processed:2013-04-24"
2) "myapp:queue:default"
3) "myapp:stat:processed"
4) "myapp:queues"
redis 127.0.0.1:6379> lrange myapp:queue:default -100 100
1) "{\"retry\":true,\"queue\":\"default\",\"timeout\":30,\"class\":\"Sidekiq::Extensions::DelayedMailer\",\"args\":[\"---\\n- !ruby/class 'BulkMailer'\\n- :general_mail\\n- - 1\\n\"],\"jid\":\"e46693944febf7ae26ec67a0\"}"
Run Code Online (Sandbox Code Playgroud)
redis 127.0.0.1:6379>
从上面可以看出,工作人员被分配到队列"默认",我想由于这个原因,工人无法处理.
我在上面的场景中使用以下命令启动了sidekiq:
bundle exec …Run Code Online (Sandbox Code Playgroud) 相关问题已在/sf/answers/799950791/上提供,但我想了解的是
使用时
a.sort { |x, y| x <=> y }
Run Code Online (Sandbox Code Playgroud)
它如何知道该块应按升序排序,并且在使用时类似
a.sort { |x, y| y <=> x }
Run Code Online (Sandbox Code Playgroud)
它如何知道这个块应该按降序排序?我很困惑,因为这两个块都使用宇宙飞船运算符,并且预计在每次比较期间返回以下内容,以防出现以下情况a.sort { |x, y| x <=> y }
并在每次比较期间进行以下情况a.sort { |x, y| y <=> x }
现在我们来看一个数组示例:
2.3.2 :023 > a = [ …Run Code Online (Sandbox Code Playgroud) 红宝石:2.3.1
导轨:5.0.0
我需要通过 Google Sheets API 访问和更新我的私人 Google Sheet。最终这将通过我的 Rails 应用程序中的重复后台作业来完成。因此,我在 Google Cloud Console 中设置了一个服务帐户。
但是要开始使用 Google Sheets API,我创建了一个脚本:
require 'google/apis/sheets_v4'
ENV["GOOGLE_ACCOUNT_TYPE"] = 'service_account'
ENV["GOOGLE_CLIENT_EMAIL"] = '<client_email_from_downloaded_json_here>'
ENV["GOOGLE_PRIVATE_KEY"] = "<private_key_from_downloaded_json_here>"
SCOPE = Google::Apis::SheetsV4::AUTH_SPREADSHEETS
authorization = Google::Auth.get_application_default(SCOPE)
# Initialize the API
service = Google::Apis::SheetsV4::SheetsService.new
service.authorization = authorization
spreadsheet_id = '<MY SPREADSHEET ID HERE>'
sheet_name = 'Sheet1'
range = "#{sheet_name}!A2:B"
response = service.get_spreadsheet_values(spreadsheet_id, range)
puts 'No data found.' if response.values.empty?
response.values.each do |row|
# Print columns A and B, which correspond to …Run Code Online (Sandbox Code Playgroud) ruby-on-rails google-oauth google-api-ruby-client google-sheets-api