小编kar*_*res的帖子

如何在ruby中安全加入路径名?

我的Rails开发环境是基于Windows的,我的生产环境是基于Linux的.

VirtualHost可能会被使用.假设需要在/public文件夹中引用一个文件名File.open('/tmp/abc.txt', 'r').

- 但在Windows中它应该是C:\tmp\abc.txt.如何进行正确的路径连接以处理两种不同的环境?

prefix_tmp_path = '/tmp/'
filename = "/#{rand(10)}.txt"

fullname = prefix_tmp_path + filename # /tmp//1.txt <- but I don't want a double //
Run Code Online (Sandbox Code Playgroud)

当prefix_tmp_path = "C:\tmp\"我得到C:\tmp\/1.txt

处理这两种情况的正确方法是什么?

ruby

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

无法使用rackup和jRuby启动简单的Sinatra应用程序(Web服务器无响应)

我有一个Sinatra"hello world"应用程序,我试图使用jRuby运行.它在我运行应用程序时有效,但在我运行机架时则无效.谁能告诉我这里发生了什么?

这是应用程序,在'app.rb'文件中:

require 'rubygems'
require 'bundler/setup'
require 'sinatra'

configure do
  set :bind, '0.0.0.0'
end

get '/' do
  'Boo!'
end
Run Code Online (Sandbox Code Playgroud)

我可以运行它bundle exec ruby app.rb,它工作正常:

jonea@centos7andy[~/andy/sinatra_sand_jruby]%: bundle exec ruby app.rb
[2015-01-12 10:36:06] INFO  WEBrick 1.3.1
[2015-01-12 10:36:06] INFO  ruby 1.9.3 (2014-12-09) [java]
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick
[2015-01-12 10:36:06] INFO  WEBrick::HTTPServer#start: pid=31654 port=4567
Run Code Online (Sandbox Code Playgroud)

这是我的config.ru来调用上面的程序:

require 'rubygems'
require 'bundler/setup'
require 'sinatra'
require './app'

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

如果我运行它,它似乎工作,但我无法使用Web浏览器访问服务器:

jonea@centos7andy[~/andy/sinatra_sand_jruby]%: bundle exec rackup -p4567 …
Run Code Online (Sandbox Code Playgroud)

ruby jruby sinatra rackup

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

如何解决Marshal.dump"没有为类Proc定义marshal_dump"错误

假设我有一个User < ActiveRecord::Base.现在,假设我想创建一个用户实例,验证它并将其存储在会话中,如果我无法保存它.

user = User.new
...
session[:new_user] = user unless user.save
...
Run Code Online (Sandbox Code Playgroud)

使用ActiveRecord会话可能最终no marshal_dump is defined for class Proc会来自Marshal.dump.

现在,解决此类序列化错误(找到"无效" Proc对象)的最佳方法是什么(通常不一定是AR)?

ruby serialization ruby-on-rails

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

Rubinius和JRuby怎么可能这么慢?

我决定看看迭代一系列哈希需要多长时间.以下是代码:

pairs = [{name: "firstname", value: "string"},{name: "lastname", value: "string"},{name: "country", value: "string"},{name: "city", value: "string"},{name: "state", value: "string"},{name: "company", value: "string"},{name: "year", value: "string"},{name: "political_affiliation", value: "string"},{name: "social_security_number", value: "string"}] * 1000
blank = {}

start = Time.now
pairs.each do |pair|
  blank[pair[:name]] = pair[:value]
end

p Time.now - start
Run Code Online (Sandbox Code Playgroud)

通过从循环之前的当前时间减去循环之后的当前时间来计算时间.

根据代码中的数学计算,这是YARV 2.1.1中计算所花费的时间:

0.001962017
Run Code Online (Sandbox Code Playgroud)

这是Rubinius 2.2.6花了多长时间:

0.022598
Run Code Online (Sandbox Code Playgroud)

和jRuby 1.7.12

0.022317
Run Code Online (Sandbox Code Playgroud)

据说Rubinius和jRuby比YARV具有性能优势.为什么他们花费的时间几乎是执行相同基本操作的12倍?这是正常的还是我有不正确的配置?

ruby benchmarking rubinius jruby microbenchmark

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