【问题标题】:Myapp::Application::Railties constant missing with Rails 4 beta and Jruby jruby-1.7.2在 Rails 4 beta 和 Jruby jruby-1.7.2 中缺少 Myapp::Application::Railties 常量
【发布时间】:2013-01-25 18:09:39
【问题描述】:

如果没有 hack,我无法让 jruby 使用 Rails 4:

在 railties/lib/rails/engine.rb 中,我必须用 const_get 初始化 Railties,否则

def railties
  @railties ||= self.class.const_get(:Railties).new
  # @railties ||= self.class::Railties.new
 end

否则我会得到这个:

./bin/rake 耙中止! 未初始化的常量 Myapp::Application::Railties org/jruby/RubyModule.java:2677:in const_missing' /Volumes/Opt/rails/rails-edge/railties/lib/rails/engine.rb:469:inrailties' /Volumes/Opt/rails/rails-edge/railties/lib/rails/application.rb:241:in run_tasks_blocks' /Volumes/Opt/rails/rails-edge/railties/lib/rails/engine.rb:444:inload_tasks' org/jruby/RubyBasicObject.java:1659:in __send__' org/jruby/RubyKernel.java:2086:insend' /Volumes/Opt/rails/rails-edge/railties/lib/rails/railtie/configurable.rb:30:in method_missing' /Volumes/Opt/projects/myapp/Rakefile:6:in(root)' org/jruby/RubyKernel.java:1046:in `load'

Rails 本身不会因为同样的原因启动。这是正确的解决方法还是我掩盖了一些潜在的问题?

【问题讨论】:

  • 我也在 jruby 1.7.3 中看到了这个
  • 我已经安装了 jruby 1.7.4.dev 并且同样的事情 - Rails 不会启动 NameError: uninitialized constant MyAppName::Application::Railties
  • 已解决(见下方答案)

标签: jruby jrubyonrails ruby-on-rails-4


【解决方案1】:

并没有真正解决问题,但我添加了

Rails::Engine.class_eval do
  def railties
    @railties ||= self.class.const_get(:Railties).new
  end
end

application.rb 中的Bundler.require 下,以避免更改原始文件。

【讨论】:

    【解决方案2】:

    这个提交到 Rails master 似乎已经解决了(对引擎的小改动):https://github.com/rails/rails/commit/45aabe61520cbb4bd74f6de7dc1023d2ca071e40

    我刚刚补充了:

    gem 'rails', :git => 'git://github.com/rails/rails.git'  
    

    或者只是

    gem 'rails', github: 'rails/rails'
    

    到我的 Gemfile 下载最新版本的 Rails,这样就成功了。能够删除 Alex 的(很好 - 谢谢!)hack,一切正常。

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多