如何为开发和生产指定不同版本的 gem

2024-04-30

我需要有不同版本的 gem 进行开发和生产,因此我将以下内容放入我的 gemfile 中。

group :development, :test do
  gem 'rspec-rails', '2.11.0'
  gem 'bcrypt-ruby', '3.1.2'
end

group :production do
  gem 'rails_12factor'
  gem 'bcrypt-ruby', '3.0.1'  
end

但如果我尝试这样做bundle install甚至只是rails console我收到上述错误

我努力了

bundle install --without production

但我仍然收到错误消息。 供参考: 我需要这样做,因为我正在阅读 Rails 教程,并且 Windows、Ruby 2.0.0 以及 bcrypt 和 Heroku 之间出现了冲突 所以我在Windows上使用bcrypt 3.1.2(对活动记录gemfile进行了修改) 以及 Heroku 上的 bcrypt 3.0.1。

请参阅此了解更多详细信息:在 Windows 上使用 bcrypt 3.0.1 和 ruby​​2.0 时出现问题 https://stackoverflow.com/questions/18541062/issues-using-bcrypt-3-0-1-with-ruby2-0-on-windows

我基本上做了第一个答案中提到的事情

EDIT

###################################################################

正如下面的答案所指出的,我确实应该在生产和开发中使用相同的版本(即使我只是在学习教程)。 我最终做的是猴子修补 ActiveModel 以使用

gem 'bcrypt-ruby', '3.1.2'

而不是

gem 'bcrypt-ruby', '~> 3.0.0'

在安全密码中。

我通过将以下内容放入 lib/secure_password_using_3_1_2.rb 来完成此操作

module ActiveModel
  module SecurePassword
    extend ActiveSupport::Concern

    module ClassMethods

      def has_secure_password
        # Load bcrypt-ruby only when has_secure_password is used.
        # This is to avoid ActiveModel (and by extension the entire framework) being dependent on a binary library.
        #gem 'bcrypt-ruby', '~> 3.0.0'
        gem 'bcrypt-ruby', '3.1.2'
        require 'bcrypt'

        attr_reader :password

        validates_confirmation_of :password
        validates_presence_of     :password_digest

        include InstanceMethodsOnActivation

        if respond_to?(:attributes_protected_by_default)
          def self.attributes_protected_by_default
            super + ['password_digest']
          end
        end
      end
    end
  end
end

然后将以下内容添加到 config/environment.rb

require File.expand_path('../../lib/secure_password_using_3_1_2.rb', __FILE__)

这个怎么样?

gem "my_gem", ENV["RAILS_ENV"] == "production" ? "2.0" : "1.0"

RAILS_ENV=production bundle
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为开发和生产指定不同版本的 gem 的相关文章

  • Ruby on Rails 两个同时创建两个不同控制器的操作

    我有一个线程控制器和消息控制器 线程 has many 消息 用户单击发送后 我将数据发送到线程控制器以创建线程 我想做到这一点 线程控制器 rb def create if thread save send data into messa
  • 如何迁移我的 Heroku 数据库?

    我试过了 heroku rake db migrate and heroku pg push 第一个给我一个 PGerror rake 中止错误 有没有办法用heroku完全重建 重置我的数据库 我似乎在他们的文档中找不到它 编辑 在此之前
  • 处理铁路中 STI 子类路线的最佳实践

    我的 Rails 视图和控制器散布着redirect to link to and form for方法调用 有时link to and redirect to它们链接的路径是明确的 例如link to New Person new per
  • 通过 ruby​​ 进程共享变量

    我正在编写一个 gem 其中我必须分叉两个进程来启动两个 webrick 服务器 我想通过基类的类方法启动该服务器 因为应该只运行这两个服务器 而不是多个服务器 在运行时 我想调用这两台服务器上的一些方法来更改变量 我的问题是 我无法通过基
  • 如何在 Ruby 中将 DateTime.now 转换为 UTC?

    如果我有d DateTime now 如何将 d 转换为 UTC 带有适当的日期 DateTime now new offset 0 将在标准 Ruby 中工作 即没有 ActiveSupport
  • 表情符号未正确保存在 mongodb 中

    我正在将 Twitter 和 Instagram 上的表情符号保存到我的 mongodb 数据库中 但是当我显示从数据库中提取的数据时 表情符号看起来像这样破损了 在将数据保存到 mongodb 期间我需要做一些不同的事情吗 我是 mong
  • Windows 等效的系统配置目录

    我正在 Ruby 中开发一个 CLI 应用程序 我希望允许通过标准配置文件级联在 Unix 中进行配置 etc appnamerc appnamerc 然而 该应用程序也应该在 Windows 环境中运行 我不确定将像这样的文件放在哪里 e
  • XHR 不起作用,因为“Access-Control-Allow-Origin 不允许来源”

    我正在使用 Rails 3 开发一个 API 服务器 到目前为止 它非常方便 但我一直遇到错误 我不确定这是因为我的 Apache 设置还是 Rails 应用程序 当我尝试执行 HTTP DELETE 或 PUT 请求时http sampl
  • 使用“ember-rails”将路由从 Rails 迁移到现有 Rails 应用程序的 Ember

    将 gem ember rails 用于现有的 Rails 应用程序 我正在尝试使用 Ember 路由一个资源 很多人告诉我这段代码应该可以工作 但事实并非如此 我想突破学习曲线并使这项工作成功 但我需要一些帮助 Error Routing
  • Rails 中对多个域/子域的支持

    我有一个 Rails 应用程序 它的设置与 Tumblr 类似 也就是说 您可以选择 1 子域名托管 your username myapp com 2 域名托管 your username com 两者都会转发到使用我的应用程序创建的该用
  • 错误:执行 gem 时... (Gem::FilePermissionError)

    我检查了所有其他类似的答案 没有一个与我的完全一样 这些解决方案也不适合我 gem environment and sudo gem environment给出相同的结果 RubyGems Environment RUBYGEMS VERS
  • Rails 中 WHERE 子句中的 ALL 运算符

    关联关系如下图所示 InstructorStudent has many fees Fee belongs to instructor student 我想要获得在所有给定数组中具有每月详细信息的指导学生 如果其中任何一个中不存在每月详细信
  • 使用哈希时 fetch 与 [] ? [复制]

    这个问题在这里已经有答案了 来自鲁比 科恩斯about hashes rb 为什么你可能想使用 fetch代替 当访问哈希键时 默认情况下 使用 如果存在则检索哈希值 如果不存在则返回 nil Using fetch给你一些选择 请参阅文档
  • 设计 - 创建用户帐户并确认而不发送电子邮件?

    我将设备与 facebook 集成 现在 当我在用户使用他 她的 Facebook 帐户登录后创建用户帐户时 user User create email gt data email password gt Devise friendly
  • 搜索逻辑和虚拟属性

    假设我有以下模型 Person
  • Rails 4 单选按钮表单助手,true 不验证

    我在 needs dist 上附加了简单的是或否单选按钮 当我提交表单时选择 否 它工作得很好 但是当我选择 是 时 它会抛出验证错误吗 它仅在 needs dist gt true 时有效 Model validates presence
  • Rails error_messages 帮助器

    这是一段很常见的代码 First name br error messages是一个辅助方法 但我很难找到它的文档 为什么呢 我在这里找到它们 error messages 具有相同的参数错误消息 http apidock com rail
  • 如果你使用belongs_to而没有相应的has_one,会发生什么?

    我有一个核心模型Item 以及一个从自定义源 例如 RSS feed 填充它的脚本 在 feed 中 每个项目都用一个标识guid 在我的系统中 项目只有一个自动生成的id首要的关键 我想要 比方说 ItemFeedInfo那个地图guid
  • 通过纱线安装 bootstrap 的 Rails 找不到字体

    我有一个带 Bootstrap 的 Rails 5 应用程序 我用纱线安装了它 我做了以下事情 yarn add bootstrap bootstrap 3 3 7 version 3 3 7 resolved https registry
  • 如何让 Twilio 在hangup() 被触发时停止拨号?

    我一直在使用 twilio ruby gem 开发 Twilio 应用程序 但我陷入了一个部分 为呼叫构建 TwiML 响应 我拨打一些号码 以便他们也可以接听呼叫 def handle gather response Twilio Twi

随机推荐