小编kdd*_*isz的帖子

xxx的副本已从模块树中删除但仍处于活动状态

我很确定错误与TenantIdLoader模块的实际内容无关.相反,它与ActiveSupport依赖关系有关.

我似乎无法克服这个错误.从我读过的内容来看,这是因为要么ActiveRecord::Base正在重新Company::TenantIdLoader加载,要么正在重新加载,而且它在某种程度上没有进行通信.请帮忙!我真的希望能够升级到Rails 4.2.

编辑

我现在已经知道这是因为我正在引用Tenant哪些是自动重新加载的.我需要能够实际引用该课程,所以有人知道如何解决这个问题吗?

配置/ application.rb中

config.autoload_paths += %W( #{config.root}/lib/company )
Run Code Online (Sandbox Code Playgroud)

配置/初始化/ company.rb

ActionMailer::Base.send(:include, Company::TenantIdLoader)
Run Code Online (Sandbox Code Playgroud)

LIB /公司/ tenant_id_loader.rb

module Company
  module TenantIdLoader

    extend ActiveSupport::Concern

    included do
      cattr_accessor :tenant_dependency
      self.tenant_dependency = {}

      after_initialize do
        self.tenant_id = Tenant.active.id if self.class.tenant_dependent? and self.new_record? and Tenant.active.present? and !Tenant.active.zero?
      end
    end

    # class methods to be mixed in
    module ClassMethods

      # returns true if this model's table has a tenant_id
      def tenant_dependent?
        self.tenant_dependency[self.table_name] ||= …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-on-rails-4

118
推荐指数
3
解决办法
4万
查看次数

Rails 3查询字符串

这里非常奇怪的错误.我们正确地收到了诸如"/ users/8788234"之类的请求

在Rails中我们称之为:

redirect_to(:controller => 'login', :from_external_page => true, :on_login => request.env['REQUEST_URI']) and return
Run Code Online (Sandbox Code Playgroud)

我们在Rails日志中看到(正如我们所期望的):重定向到

https://sampleapp.com/login?from_external_page=true&on_login=%2Fusers%2F8788234
Run Code Online (Sandbox Code Playgroud)

但是,我们从IP中看到的下一个请求是查询字符串的值已加扰:

Started GET "/login?from_external_page=gehr&on_login=%2Shfref%2S8788234" for xx.xxx.xxx.xxx at yyyy-mm-dd
Run Code Online (Sandbox Code Playgroud)

这两者都使查询字符串值无意义并导致以下错误:

ArgumentError: invalid %-encoding
Run Code Online (Sandbox Code Playgroud)

(%2F更改为%2S,无效).查询字符串中每个键值对的每个值都会移动13个字符.每次我们看到这个,用户代理读取:"Mozilla/5.0(兼容; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",但我们也看到用户代理成功导航应用程序.有没有人见过这样的东西?http://www.whatismybrowser.com/告诉我这个用户代理是在Windows 7上运行的IE9,但我们无法重现该错误.

windows internet-explorer ruby-on-rails

14
推荐指数
1
解决办法
854
查看次数

SerializationError Rails ActiveJob时间和日期

有人知道一种干净的方法来避免ActiveJob::SerializationError在尝试序列化DateTime对象时发生这种情况吗?

我到目前为止的两个解决方案是:

  • dump在加载参数时调用Marshal/JSON/YAML 然后load返回到Job(这很糟糕,因为我需要修补邮件程序作业)
  • 猴子补丁DateTime像这样:

/lib/core_ext/time.rb

class Time

  include GlobalID::Identification

  def id
    self.to_i
  end

  def self.find(id)
    self.at(id.to_i)
  end
end
Run Code Online (Sandbox Code Playgroud)

/lib/core_ext/date.rb

class Date

  include GlobalID::Identification

  def id
    self.to_time.id
  end

  def self.find(id)
    Time.find(id).to_date
  end
end
Run Code Online (Sandbox Code Playgroud)

哪个也很糟糕.谁有更好的解决方案?

ruby ruby-on-rails ruby-on-rails-4 rails-activejob

14
推荐指数
1
解决办法
2415
查看次数

Rails 4.2从活动作业中获得延迟的作业ID

知道如何Delayed::Job从ActiveJob入队获取id吗?当我排队一个工作时,我得到一个ActiveJob::Base带有a 的实例@job_id,但该工作ID似乎是ActiveJob的内部.到目前为止,我最好的猜测就是走下最近创建的工作:

active_job_id = GenerateReportJob.perform_later(self.id).job_id
delayed_job = Delayed::Job.order(id: :desc).limit(5).detect do |job|
  YAML.load(job.handler).job_data['job_id'] == active_job_id
end
Run Code Online (Sandbox Code Playgroud)

但这似乎是各种各样的hacky.有点惊讶的ActiveJob没有返回ID Delayed::Job,特别是因为这是在作业入队时显式返回的内容.

==编辑

看起来我不是唯一一个(https://github.com/rails/rails/issues/18821)

ruby-on-rails delayed-job ruby-on-rails-4 rails-activejob

13
推荐指数
1
解决办法
5308
查看次数

什么时候需要在rails Gemfile中使用require?

在我的gemfile中,我有类似的东西:

gem 'net-sftp', '2.1.1', :require => 'net/sftp'
gem 'backup', '3.0.27'
gem 'watu_table_builder', :require => 'table_builder'
gem 'browser', '0.1.6'
Run Code Online (Sandbox Code Playgroud)

在Gemfile中你需要一个要求吗?我也找到了类似的东西:require => false.救命?

ruby ruby-on-rails bundler gemfile

6
推荐指数
1
解决办法
1308
查看次数

布尔检查字符串是否与ruby中的正则表达式匹配?

在ruby中,我看到很多代码都在执行以下操作:

def test(s)
  s =~ /Macintosh/
end
Run Code Online (Sandbox Code Playgroud)

测试字符串是否与正则表达式匹配.但是,这会返回fixnum或nil,具体取决于它是否找到匹配项.有没有办法做同样的操作,但让它返回一个布尔值,看它是否匹配?

我认为这两个可能的解决方案是!(s =~ /Macintosh/).nil?!(s !~ /Macintosh/),但那些都显得非常可读的.是否有类似的东西:

def test(s)
  s.matches?(/Macintosh/)
end
Run Code Online (Sandbox Code Playgroud)

ruby regex

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

使用Mongoid和ActiveRecord的成本/收益是多少?

Google搜索使我想到一些问题,希望同时使用Mongoid和activerecord。我已经看到了很多关于木乃伊的问题和很多关于ActiveRecord的问题,但是都没有将它们进行比较。

我想问题是,与用于MySQL的activerecord一起运行带有针对mongoid db的rails的mongoid适配器有什么好处?

ruby activerecord ruby-on-rails mongoid

0
推荐指数
1
解决办法
1659
查看次数

红宝石中的三元运算符

似乎应该有更好的方法来做到这一点:

def some_method(argument = 'foo')
  bar = argument == 'foo' ? 'foo' : "#{argument.to_s}_foo"

  # ... do things with bar ...
end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我也玩过

bar = ("#{argument}_" if argument != 'foo').to_s + argument
Run Code Online (Sandbox Code Playgroud)

但如果有什么看起来更复杂

ruby

0
推荐指数
1
解决办法
87
查看次数