标签: ruby

Ruby匹配gsub替换的第一次出现的字符串

我有一个字符串让我们说http://someUrul.com/someController/SOmeAction?SomeQS=http://someOtherUrl

我想用https替换第一个http,但不是第二个,所以我最终得到https://someUrul.com/someController/SOmeAction?SomeQS = http:// someOtherUrl

我怎样才能用一个简单的gsub实现这个目标?以下内容替换了两者.

request.url.gsub(/http:/, "https:")
Run Code Online (Sandbox Code Playgroud)

ruby regex string-substitution gsub

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

了解establish_connection如何在ActiveRecord中工作

此代码取自ActiveRecord 2.3.14的gem类 ConnectionHandler

def establish_connection(name, spec)
  @connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
Run Code Online (Sandbox Code Playgroud)

似乎每次ruby调用establish_connection模型时,它都会创建一个新的连接池.

我的问题:

如果我有5个模型用于establish_connection同一个数据库,Rails是否足够聪明,可以选择一个已经存在的池,而不是创建一个具有相同连接凭据的新池?如果我的5个模型是一些使用的抽象类的子类,是否也会发生这种情况establish_connection?是否总是从@connection_pools它存在的地方选择一个连接?

更新1

我在谈论一个具体的例子.你有5个模型有5个不同的连接,每次Rails使用它执行的模型establish_connection.查看ActiveRecord中的代码,当它执行时,establish_connection它会创建一个与该特定连接有连接的新池.我想知道的是,每次Rails调用模型时establish_connection,是创建新池还是采用现有池.

示例:您访问我的网站并查看产品列表.您刚刚点击了一个调用的动作,该动作Product.all执行establish_connection到亚马逊上的某个数据库.然后,我来到产品列表,会发生什么?我是否已获取已建立的连接,或者是否正在创建具有该连接的新池?

更新2

我的猜测是,第一次Rails加载我的模型,它创建了具有不同连接的池.之后,当我使用一些时Model.method,它只是抓取与模型相关的连接并执行该方法.

我不确定当2个模型有两个相等的连接时会发生什么(不是在抽象类中而是在自习类中).这会产生两个相同的连接池,还是ActiveRecord足够智能来捕捉这种情况?

ruby activerecord ruby-on-rails

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

如何在OpenURI中指定"http请求标头"

我试图使用Ruby的OpenURI gem调用URL,但是它需要我在其HTTP请求头中传递某些值.

知道怎么做吗?

ruby open-uri

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

Rake"已经初始化了恒定的WFKV_"警告

试图运行rake cucumber:ok并收到此错误:

/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_

然后:
Command failed with status (1): [/Users/dev/.rbenv/versions/1.9.2-p290/bin...]

我是Rails的新手,谷歌没有为此错误做任何改变.

编辑:我已经尝试添加bundle exec,这没有任何区别.

这是我得到的--trace:

/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:53:in `block in create_shell_runner'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:45:in `call'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:45:in `sh'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/file_utils_ext.rb:36:in `sh'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/cucumber-1.1.0/lib/cucumber/rake/task.rb:104:in `run'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/cucumber-1.1.0/lib/cucumber/rake/task.rb:193:in `block in define_task'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:205:in `call'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:205:in `block in execute'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:200:in `each'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:200:in `execute'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/task.rb:144:in `invoke'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:112:in `invoke_task'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:90:in `block (2 levels) in top_level'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:90:in `each'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:90:in `block in top_level'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:84:in `top_level' …
Run Code Online (Sandbox Code Playgroud)

ruby rake

33
推荐指数
2
解决办法
8729
查看次数

Rails 100%newb issue - send()方法

有人可以帮我理解下面列出的'send()'方法用于什么?下面的代码,当我阅读它时,没有任何意义,它的目的是什么.

这是一个使用Ruby 1.8.7和Rails 1.2.3的Rails应用程序.请不要担心升级,这是客户的环境,所以我没有那种闲暇.

不用说,我所指的陈述是这样的;

def do_schedule
  @performance = Performance.new(params[:performance])
  @performer = Performer.find(params[:performer_id])
  selected_track = params[:selected_track]
  if FileTest.exists?(File.expand_path(@performer.photo))
    @performance.photo = File.open(File.expand_path(@performer.photo))
  end

  @performance.audio = File.open(File.expand_path(@performer.send(selected_track)))

  if @performance.save
    flash[:notice] = 'Performer scheduled.'
    redirect_to :controller => :performer, :action => :index
  else
    render :action => 'schedule'
  end
end
Run Code Online (Sandbox Code Playgroud)

表演者模特

class Performer < ActiveRecord::Base
  file_column :audio_one
  file_column :audio_two
  file_column :audio_three
  file_column :photo

  belongs_to :festival
  validates_presence_of :name, :first_name, :last_name, :address, :city, :state, :zip, :daytime_phone, :availability, :stages
  validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
  validates_confirmation_of :email

  validates_presence_of :audio_one, …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails send

33
推荐指数
3
解决办法
3万
查看次数

如果URL不存在,请将http添加到URL?

我在我的模型中使用此正则表达式来验证用户提交的URL.我不想强迫用户输入http部分,但是如果它不在那里,我想自己添加它.

validates :url, :format => { :with => /^((http|https):\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+).[a-z]{2,5}(:[0-9]{1,5})?(\/.)?$/ix, :message => " is not valid" }
Run Code Online (Sandbox Code Playgroud)

知道我怎么能这样做吗?我对验证和正则表达式的经验很少..

ruby regex validation url ruby-on-rails

33
推荐指数
4
解决办法
2万
查看次数

Ruby,RVM,LLVM和MySQL

我在MacOSX上配置Ruby和MySQL时遇到了大麻烦.事实上,我是MacOSX和Ruby On Rails的新手.

所以,首先我遇到安装mysql2 gem的问题,在安装了gem之后我正在尝试开发人员测试,当我尝试启动时,WEBrick得到了这个错误,说无法加载名为"libmysqlclient.18.dylib"的MySQL库".Googlin'关于错误我看到每个人都建议通过RVM使用Ruby.我安装了RVM并尝试安装ruby 1.9.3并收到此错误:

错误:提供的CC(/ usr/bin/gcc)是基于LLVM的,ruby和gem尚未完全支持,请阅读rvm requirements.

我几乎放弃学习Rails,设置开发环境不应该那么痛苦.在Windows上我没有遇到任何问题.

[] Renan

ruby macos ruby-on-rails rvm

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

Ruby数组到Javascript数组

我有一个带有帐户ID的Ruby数组.

我想将一个帐户ID的Ruby数组存储在一个Javascript数组中.

我想知道最好的方法吗?

此外,当我一直试图这样做时,似乎Javascript认为如果只输入一个帐户ID,则应该是数组的大小.有没有解决的办法?我试过把它放在引号中,但这似乎不起作用.

javascript ruby

33
推荐指数
3
解决办法
2万
查看次数

如何安装json gem - 无法构建gem native扩展(mac 10.10)

操作系统:Mac OS X 10.10.3 XCode:安装了命令行工具的最新版本(版本6.3)Rails:版本4.2.1 Ruby:版本2.2.1

我正在尝试为我正在处理的项目生成路由(定期执行此操作),当我收到错误消息时,建议我执行捆绑安装和捆绑执行.我做了,这一次,在编译JSON Gem(版本1.7.7)时,这个过程中断了.

在StackOverflow上做一些研究,建议更新Xcode的命令行工具,我做了,但这并没有解决问题.

我尝试单独安装JSON版本1.7.7,但它失败了,告诉我要查找错误日志:

/Users/zwb/.rvm/rubies/ruby-2.2.1/bin/ruby -r ./siteconf20150411-36070-1t083xl.rb extconf.rb
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling generator.c
In file included from generator.c:1:
./../fbuffer/fbuffer.h:175:47: error: too few arguments provided to function-like macro invocation
    VALUE result = rb_str_new(FBUFFER_PAIR(fb));
                                              ^
/Users/zwb/.rvm/rubies/ruby-2.2.1/include/ruby-2.2.0/ruby/intern.h:793:9: note: macro 'rb_str_new' defined here
#define rb_str_new(str, len) __extension__ (    \
        ^
In file included from generator.c:1:
./../fbuffer/fbuffer.h:175:11: warning: incompatible pointer to integer conversion initializing 'VALUE' (aka 'unsigned long') with an expression of type 'VALUE (const …
Run Code Online (Sandbox Code Playgroud)

ruby macos xcode json ruby-on-rails

33
推荐指数
2
解决办法
3万
查看次数

进程'pid,ppid,uid,euid,gid和egid之间有什么区别?

上下文:我正在获取当前的Ruby进程ID.

Process.pid  #=> 95291

Process.ppid #=> 95201

Process.uid  #=> 501

Process.gid  #=> 20

Process.euid #=> 501

Process.egid #=> 20
Run Code Online (Sandbox Code Playgroud)

ruby pid process

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