小编dav*_*vid的帖子

在UTF-8中rake无效的字节序列

出乎意料的是,我在运行rails 3.2和Ruby 1.9.3p125的网络服务器上的任何rake命令都会遇到一个奇怪的错误,无论什么样的rake任务,堆栈跟踪都是一样的.除了Rakefile和lib/tasks中的ascii之外什么都没有.

堆栈跟踪:

rake --trace
rake aborted!
invalid byte sequence in UTF-8
/usr/local/lib/ruby/1.9.1/rake/application.rb:183:in `glob'
/usr/local/lib/ruby/1.9.1/rake/application.rb:183:in `block in have_rakefile'
/usr/local/lib/ruby/1.9.1/rake/application.rb:181:in `each'
/usr/local/lib/ruby/1.9.1/rake/application.rb:181:in `have_rakefile'
/usr/local/lib/ruby/1.9.1/rake/application.rb:468:in `find_rakefile_location'
/usr/local/lib/ruby/1.9.1/rake/application.rb:486:in `raw_load_rakefile'
/usr/local/lib/ruby/1.9.1/rake/application.rb:82:in `block in load_rakefile'
/usr/local/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/1.9.1/rake/application.rb:81:in `load_rakefile'
/usr/local/lib/ruby/1.9.1/rake/application.rb:65:in `block in run'
/usr/local/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/1.9.1/rake/application.rb:63:in `run'
/usr/local/bin/rake:32:in `<main>'
Run Code Online (Sandbox Code Playgroud)

有问题的方法是

def have_rakefile
      @rakefiles.each do |fn|
        if File.exist?(fn)
          others = Dir.glob(fn, File::FNM_CASEFOLD)
          return others.size == 1 ? others.first : fn
        elsif fn == ''
          return fn
        end
      end
      return nil
    end
Run Code Online (Sandbox Code Playgroud)

由于堆栈跟踪对我没有帮助,我"#{fn} #{File::FNM_CASEFOLD}"在块的开头插入了一个puts …

ruby rake ruby-on-rails-3

4
推荐指数
1
解决办法
2550
查看次数

插件不在开发模式下重新加载

我写的一个插件有一个奇怪的问题.奇怪的是,我有另外一个打开各种ActiveRecord类的插件,它没有自动重新加载的问题.

在我的插件init.rb文件中

User.class_eval do
  has_one :reputation
  include Karma 
  alias :rep :reputation
end
Run Code Online (Sandbox Code Playgroud)

如果我在生产模式或rails控制台中运行它没有问题.当我在开发中运行它时它会加载一次,但除非我重新启动服务器,否则永远不会再加载它.

我在我正在使用的其他插件(acts_as_readable)中找不到任何特殊内容,它以相同的方式打开User.


编辑:

我做了:

ActiveRecord::Base.class_eval do
  class << self
    def has_karma_values
      has_one :reputation
      alias :rep :reputation
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在plugiin的init.rb文件中做了

class User < ActiveRecord::Base
...
has_karma_values
...
end
Run Code Online (Sandbox Code Playgroud)

并且得到关于has_karma_values不存在的相同错误.此时尚未加载插件.

令人困惑的是,作为可读的行为完全没有问题

User.class_eval do
  has_many :readings
end

ActiveRecord::Base.send :include, ActiveRecord::Acts::Readable
Run Code Online (Sandbox Code Playgroud)

但我的确如此.

这是我完整的init.rb文件

require 'reputation'
require 'karma_name'
require 'karma_tag'
require 'karma_title'
require 'acts_as_karmable'
require 'karma'
require File.expand_path('../lib/generators/karma_generator', __FILE__)

KarmaTitle.setup 'Default'

ActiveRecord::Base.class_eval do
  class << self
    def has_karma_values
      has_one :reputation
      alias :rep …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3

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