标签: railtie

Bundler无法为Rails 4.0.0找到gem"railties"的兼容版本

我想升级到Rails的4.0.0,和我换的宝石版本sass-railscoffee-rails.我需要在升级到Rails 4之前railscoffee-rails之前解决这个gem冲突.

当我运行时,bundle update这是我得到的输出:

$ bundle update
Updating git://github.com/pilu/web-app-theme.git
Fetching source index from https://rubygems.org/
Resolving dependencies..............
Bundler could not find compatible versions for gem "railties":
  In Gemfile:
    rails (= 4.0.0) ruby depends on
      railties (= 4.0.0) ruby

    coffee-rails (= 4.0.0) ruby depends on
      railties (4.0.0.rc2)
Run Code Online (Sandbox Code Playgroud)

我的Gemfile:

source 'https://rubygems.org'

gem 'rails', '4.0.0'

gem 'cancan'
gem 'client_side_validations'
gem 'devise', '~> 1.5.3'
gem 'dynamic_form'
gem 'execjs'
gem 'haml'
gem 'httparty'
gem …
Run Code Online (Sandbox Code Playgroud)

gem ruby-on-rails railtie ruby-on-rails-4

44
推荐指数
5
解决办法
5万
查看次数

每个ruby.railstutorial.org升级到rails 4后无法加载铁路

操作系统是Ubuntu 12.04,64位.

新的铁路.相对较新的Ruby.遵循ruby.railstutorial.org教程,第3章.

本教程已更新为使用ruby 2.0.0和Rails 4.0.0.rc1.以前gemfile是指定Rails 3.2.13而不是指定Ruby版本.在转到教程中的最新Gemfile,ruby 2.0.0和Rails 4.0.0.rc1之后,运行rails命令时出现以下错误.这里的示例是rails服务器

    user@machine:~/bin/railslearn/sample_app$ rails server
/home/paul/bin/railslearn/sample_app/config/application.rb:7:in `require': cannot load such file -- active_resource/railtie (LoadError)
    from /home/paul/bin/railslearn/sample_app/config/application.rb:7:in `<top (required)>'
    from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:78:in `require'
    from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:78:in `block in <top (required)>'
    from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:75:in `tap'
    from /home/paul/.rvm/gems/ruby-2.0.0-p195@railstutorial_rails_4_0/gems/railties-4.0.0.rc1/lib/rails/commands.rb:75:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我确实从Rails得到了一些想法:找不到下面列出的铁路,但还没有找到解决办法.

这是细节.

昨天(在我的浏览器中)第3章的Gemfile如下所示.一切都很好.

$ cat Gemfile
source 'https://rubygems.org'

gem 'rails', '3.2.13'
gem 'bootstrap-sass', '2.1'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.0.1'
gem 'will_paginate', '3.0.3'
gem 'bootstrap-will_paginate', '0.0.6' …
Run Code Online (Sandbox Code Playgroud)

rubygems ruby-on-rails railstutorial.org gem-bundler railtie

43
推荐指数
1
解决办法
2万
查看次数

Ruby On Rails中铁路和引擎之间的差异3

我读了一些关于这些论点的文件,但我不清楚它们是什么,它们之间有什么区别,如果其中一个符合我的需要.

我需要编写一个可插入其他应用程序的应用程序,并希望将其作为gem包含在其他应用程序中.基本上我需要一些模型,一个控制器和没有视图,加上一些初始化,支持来自托管应用程序和生成器的配置参数.

我是正确的吗?

我应该阅读什么才能理解如何做到这一点?

更新:

有很多细节AF一个很不错的文章,可以发现在这里.

实质上:

Railtie是Rails框架的核心,它提供了几个钩子来扩展Rails和/或修改初始化过程.

Rails :: Engine只不过是一个已经设置了一些初始化程序的Railtie.由于Rails :: Application和Rails :: Plugin是引擎,因此这里描述的相同配置可以在所有三个中使用.

ruby-on-rails-plugins rails-engines ruby-on-rails-3 railtie

28
推荐指数
2
解决办法
5232
查看次数

为什么没有执行Railtie初始化程序?

在制作Passenger-Monit插件时,我认为使用初始化器是最合适的,即


module PassengerMonit
  class Railtie < Rails::Railtie
    initializer "my_plugin.some_init_task" do
      # my initialization tasks
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,由于某种原因,块中的代码从未执行过.我终于做了一个解决方案

config.before_initialize {}
Run Code Online (Sandbox Code Playgroud)

但我很好奇,为什么初始化程序没有被执行.有什么可以阻止它运行?

initializer ruby-on-rails-plugins ruby-on-rails-3 railtie

7
推荐指数
1
解决办法
975
查看次数

适用于Rails的mobile_fu 4

我正在尝试将我的应用程序从Rails 3.2.13切换到Rails 4.这样做,我遇到了一个主要障碍 - 我使用gem mobile_fu来确定用户是否来自移动设备.那个宝石需要3.2.13的栏杆,但轨道4.0.2和轨道4.0.2的sass-rails都要求栏杆> = 4.0.

什么是解决这个问题的好方法?我很乐意深入研究mobile_fu代码,因为它似乎并不特别棘手,但我在处理铁路以及对铁路的依赖性方面的经验很少.

谢谢!

ruby-on-rails bundler ruby-on-rails-3 railtie

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

在非开发层上预览邮件程序

我有几个邮件预览下spec/mailer/previews.在development我可以查看下的所有预览/rails/mailers/.但是,默认情况下,此功能在其他环境中不存在.

我想在staging环境中启用它,并在这里这篇文章中排队.

我做了以下更改 -

配置/ routes.rb中

# Add the routes manually
if Rails.env.staging?
  get "/rails/mailers" => "rails/mailers#index"
  get "/rails/mailers/*path" => "rails/mailers#preview"
end
Run Code Online (Sandbox Code Playgroud)

配置/环境/ staging.rb

Rails.application.configure do
  # Define the mailer preview path
  config.action_mailer.preview_path = "spec/mailers/previews"

  # Specifically add that path and all files under it to the autoload paths
  config.autoload_paths = Dir["#{config.root}/#{config.action_mailer.preview_path}/**"]
end

class ::Rails::MailersController
  include Rails.application.routes.url_helpers

  # Override the method just for this controller so `MailersController` thinks …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionmailer railtie

6
推荐指数
2
解决办法
671
查看次数

禁用 gem 的 Railtie 初始化程序

有没有办法禁用默认情况下由 gem 加载的 Railtie?

gem 的开发人员并没有将其模块化,一旦将 gem 放入 Gemfile 中,require 就会自动以这种方式加载 Railties:

require 'some_gem'

module SomeGem
  module RailtieMixin
    extend ActiveSupport::Concern

    included do
      rake_tasks do
        require 'some_gem/rake_tasks'
      end

      initializer 'some_gem.configuration' do
        config.after_initialize do
          ...
        end
      end

      initializer 'some_gem.controller_methods' do
        ...
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我想进行一些控制,最好仅禁用'some_gem.controller_methods',可以这样做吗?没有猴子补丁?不修补宝石?

ruby ruby-on-rails railtie ruby-on-rails-5

6
推荐指数
2
解决办法
1506
查看次数

Railtie Initializer未在插件中运行

我最近从gem版本切换resources_controller到了依赖plugingem版本git.

vendor/plugins/plugin/lib/plugin.rb文件内部,Railtie如下:

module Ardes
  module ResourcesController
    class Railtie < Rails::Railtie
      initializer 'ardes.resources_controller' do
        ActiveSupport.on_load(:action_controller) do
          extend Ardes::ResourcesController
          include Ardes::ResourcesController::RequestPathIntrospection
        end

        ActiveSupport.on_load(:active_record) do
          include Ardes::ActiveRecord::Saved
        end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经require 'resources_controller'在我的一个初始化程序中添加了一个并正确加载此文件.问题是虽然Railtie被评估(puts类块中的一个将被击中),但它似乎永远不会实际调用初始化块本身.这当然很重要,因为这是扩展ActionController到包括resources_controller_for方法的地方.

这个问题似乎已经出现在这里这里.虽然在这两种情况下他们都找到了解决问题的其他方法,但没有直接回答为什么没有调用块.

从我在Rails文档中可以看出,您可以将初始化程序块命名为您想要的任何内容,并且它应该运行.我认为这不重要,但我在生产中运行时首先注意到了这个问题,rails s -e production但我相信在开发模式中存在同样的问题.

可能会发生什么?

作为参考,完整的插件在这里:https://github.com/ianwhite/resources_controller

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

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

Railtie:如何访问初始化程序和lib加载钩子?

我正在为我的Rails应用程序开发一个gem,它将通过Railtie加载到它中.我基本上是在旧的Rails应用程序风格中插入模型,加上库和一些初始化器.我主要担心的是在整个Rails应用程序加载逻辑中并不完全知道我应该最好插入它们.我的要求是:gem初始化器必须在app初始化器之前加载,与libs相同,初始化器访问lib信息.在Rails应用程序工作流程中,它以某种方式工作.我的短期解决方法如下:

module Gemname
  def self.initialize_railtie
    ActiveSupport.on_load :active_record do
      require 'gemname/lib'
      require 'gemname/initializers'
    end
  end
  class Railtie < Rails::Railtie
  initializer 'gemname.insert_into_app' do
    Gemfile.initialize_railtie
  end
end 
Run Code Online (Sandbox Code Playgroud)

所以这样,我确定在初始化器之前加载了libs.我非常确定有更好的方法,即访问一些铁路钩子,这允许我使用应用程序库加载我的库,使用应用程序初始化器加载初始化程序.我似乎无法找到它们.

gem ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 railtie

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

如何在测试中触发Railtie初始化程序?

我有自己的宝石,我的护发带看起来像...

class MyRailtie < Rails::Railtie
  initializer "my_railtie.configure_rails_initialization" do
    # some initialization behavior
  end
end
Run Code Online (Sandbox Code Playgroud)

并且我正在尝试对其进行测试,但是在测试中,初始化器从未被调用。而且我注意到我也依赖于另一个具有初始化程序的gem,它们也不会被调用。

您是否知道除了需要文件外还应该做什么?

ruby gem initialization ruby-on-rails railtie

4
推荐指数
2
解决办法
1450
查看次数