为什么只有一些Date类的方法在没有显式的情况下加载:
require 'date'
Run Code Online (Sandbox Code Playgroud)
线?
例如:
irb(main):002:0> Date.today
NoMethodError: undefined method `today' for Date:Class
from (irb):2
from /Users/mwlang/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)
然后...
irb(main):003:0> require 'date'
=> true
Run Code Online (Sandbox Code Playgroud)
导致...
irb(main):004:0> Date.today
=> #<Date: 2013-04-12 ((2456395j,0s,0n),+0s,2299161j)>
Run Code Online (Sandbox Code Playgroud)
http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/Date.html上的文档似乎没有提供有关此行为的明确说明.关于#irc的评论说它是一个stdlib而不是核心库,但是核心甚至没有定义Date类,并且使用-f(抑制读取.irbrc)启动irc以获得最小负载仍然会出现加载某种基础/核心日期类.
想要对正在发生的事情进行技术性解释,并引用解释这一点的Ruby文档,以便我在从Ruby 1.8.7切换到Ruby 2.0.0时遇到其他类似的问题.
我正在尝试编写一个rake任务,它将设置一个镜像我的项目的环境.
task :environment do
require 'rubygems'
require 'sequel'
# require 'my_projects_special_files'
end
task :foo => [:environment] do
require 'irb'
IRB.start
end
Run Code Online (Sandbox Code Playgroud)
导致irb抱怨"foo"不存在(任务的名称)
10:28:01:irb_test >> rake foo --trace (in /Users/mwlang/projects/personal/rake/irb_test) ** Invoke foo (first_time) ** Invoke environment (first_time) ** Execute environment ** Execute foo rake aborted! No such file or directory - foo /opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `initialize' /opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `open' /opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `initialize' /opt/local/lib/ruby/1.8/irb/context.rb:80:in `new' /opt/local/lib/ruby/1.8/irb/context.rb:80:in `initialize' /opt/local/lib/ruby/1.8/irb.rb:92:in `new' /opt/local/lib/ruby/1.8/irb.rb:92:in `initialize' /opt/local/lib/ruby/1.8/irb.rb:57:in `new' /opt/local/lib/ruby/1.8/irb.rb:57:in `start' /Users/mwlang/projects/personal/rake/irb_test/Rakefile:9
在基于Rails版本的gem中管理条件流的正确方法是什么?
Rails 4改变了一些东西,所以我需要根据Rails主要版本为4对3或之前的条件流动.
我最接近的是:
if Rails.version.split(".").first.to_i < 4
# Do the Rails 4 thing
else
# Do it the old way
end
Run Code Online (Sandbox Code Playgroud) 我正在寻求一种更加简化和强大的方法来在操作系统更新后保持我的rvm环境不变.我正在使用Mountain Lion,rvm 1.18.16和homebrew,它有readline,gettext,libxml2,libxslt,qt,gtk + - 通常为我打破的宝石是nokogiri和capybara-webkit
在更新Mountain Lion和XCode之后,我的原生扩展宝石和Ruby已经两次破损了,我不得不花时间让一切都恢复正常.我不得不怀疑我是否遵循了在系统更新后更新所有rvm组件的最佳实践.
通常情况下,具有本机扩展的gem将链接到不再可用的旧库,尤其是围绕Mountain Lion的libxml问题.这是我让系统在所有项目中重新上线的基本步骤(我在rvm下安装了大约8个Ruby版本,所以这很乏味!).
首先,通过App Store更新Mountain Lion和XCode.
二,更新自制软件:
brew update
brew upgrade
Run Code Online (Sandbox Code Playgroud)
然后列出你的红宝石并开始重新编译每一个...
rvm list
rvm reinstall ruby-1.9.2-p290
rvm reinstall ruby-1.9.3-p392
...
Run Code Online (Sandbox Code Playgroud)
注意:我确实尝试过:
rvm all do reinstall
Run Code Online (Sandbox Code Playgroud)
但这给了我这个错误:"重新安装:找不到命令"
接下来,逐步浏览每个ruby并在gem上执行pristine(这具有重新编译所有本机扩展gem的副作用):
rvm use ruby-1.9.3-p392
gem pristine --all
Run Code Online (Sandbox Code Playgroud)
最后,转到每个项目并执行以下操作:
bundle install
Run Code Online (Sandbox Code Playgroud)
我不确定最后一步是否是绝对必要的 - 有些项目似乎没问题,有些项目没有,但是运行这似乎可以解决最后剩下的问题.
当然,有一种更简化的方法来管理这个过程!?我只使用了Mountain Lion和rvm几个月,但在那个时候,两个系统更新已经杀死了我工作的大部分Ruby环境.我安装了很多Ruby版本,因为我担任顾问并遇到许多开发环境,所以我真的很想把它变成一个容易重复的过程.
有什么想法吗?以上可以进一步改善吗?
虽然,类似的问题,但提出的解决方案都没有奏效.
在从Rails 4.0.0升级到Rails 4.1.4之前,一切正常.作为调试的一部分,我删除了Gemfile.lock并使用"bundle install"重新生成
Rails 4.1.4 Ruby 2.0
由于2.12.x中的问题不能与Rails 4.1.4一起使用,链轮限制在2.11.0.sass-rails限制在4.0.2.作为限制链轮版本的相同问题的一部分.
的Gemfile:
source 'https://rubygems.org'
gem 'rails', '= 4.1.4'
gem 'sass-rails', '4.0.2'
gem 'haml-rails'
gem 'coffee-rails'
gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'uglifier'
gem 'therubyracer'
gem 'turbolinks'
group :development do
gem 'thin'
gem 'erb2haml'
gem 'capistrano'
gem 'rvm-capistrano'
gem 'rspec-rails'
end
gem 'jbuilder'
gem 'mysql2', '~> 0.3.12b5'
gem "sprockets", "2.11.0"
gem 'better_errors', group: :development
gem 'sprockets_better_errors', group: :development
gem 'binding_of_caller', group: :development
gem 'quiet_assets', group: [:development, :test]
# Lots more gems omitted... …Run Code Online (Sandbox Code Playgroud)