我有一个字符串让我们说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) 此代码取自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的OpenURI gem调用URL,但是它需要我在其HTTP请求头中传递某些值.
知道怎么做吗?
试图运行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) 有人可以帮我理解下面列出的'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) 我在我的模型中使用此正则表达式来验证用户提交的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)
知道我怎么能这样做吗?我对验证和正则表达式的经验很少..
我在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
我有一个带有帐户ID的Ruby数组.
我想将一个帐户ID的Ruby数组存储在一个Javascript数组中.
我想知道最好的方法吗?
此外,当我一直试图这样做时,似乎Javascript认为如果只输入一个帐户ID,则应该是数组的大小.有没有解决的办法?我试过把它放在引号中,但这似乎不起作用.
操作系统: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进程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)