我的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
处理这两种情况的正确方法是什么?
我有一个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) 假设我有一个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)?
我决定看看迭代一系列哈希需要多长时间.以下是代码:
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倍?这是正常的还是我有不正确的配置?