在进行 Rails asset:precompile 时如何运行一些初始化程序?

2024-04-08

背景

我有一个应用程序,最近更新到了 Rails 3.2.1(从 Rails 3.0.x),并重构了 JS 和 CSS 资源以利用新的资源管道。该应用程序托管在具有 Celadon Cedar 堆栈的 Heroku 上。

应用程序配置

我将应用程序特定的配置保存在名为 app_config.yml 的 YAML 文件中,并使用初始值设定项将其加载到全局 APP_CONFIG 变量中:

# config/initializers/load_app_config.rb

app_config_contents = YAML.load_file("#{Rails.root.to_s}/config/app_config.yml")
app_config_contents["default"] ||= {}
APP_CONFIG = app_config_contents["default"].merge(
                       app_config_contents[Rails.env] || {} ).symbolize_keys

Heroku 上的资产编译

Heroku 支持内置于 Cedar 堆栈中的 Rails 资产管道。当您将应用程序推送到 Heroku 时,它会自动调用rake assets:precompile作为部署过程中的一个步骤在服务器上进行。然而,它是在没有数据库访问或普通 ENV 变量的沙盒环境中执行此操作的。

如果允许应用程序在资产预编译期间正常初始化,则会在尝试连接数据库时引发错误。通过将以下内容添加到 application.rb 文件中可以轻松解决此问题:

    # Do not load entire app when precompiling assets
    config.assets.initialize_on_precompile = false

我的问题

When initialize_on_precompile = false设置后,中没有任何初始化程序config/initializers/*正在运行。我遇到的问题是我需要 APP_CONFIG 变量在资产预编译期间可用。

我怎样才能得到load_app_config.rb在资产编译期间加载而不初始化整个应用程序?我可以用group参数传递给 Rails::Application.initialize! ?


Rails 允许您仅在某些组中注册初始化程序,但您需要使用 Railtie API:

# in config/application.rb

module AssetsInitializers
  class Railtie < Rails::Railtie
    initializer "assets_initializers.initialize_rails",
                :group => :assets do |app|
      require "#{Rails.root}/config/initializers/load_config.rb"
    end
  end
end

您不需要检查 AppConfig 是否已定义,因为它只会在资产组中运行。

并且您可以(并且应该)继续使用initialize_on_precompile = false。 load_config.rb 初始化程序将在初始化应用程序时运行(因为它位于config/initializers) and当预编译而不初始化时(因为上面的代码)。

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

在进行 Rails asset:precompile 时如何运行一些初始化程序? 的相关文章

  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • 如何从引擎覆盖 Rails 应用程序路由?

    我有一个 Rails 应用程序 我正在尝试将 Rails 引擎集成到其中 主机应用程序有一些捕获所有路由 magic urls match gt admin rendering show match path edit gt admin r
  • 使用 VCR 过滤敏感数据

    我正在使用 VCR gem 记录 http 交互并在将来重播它们 我想过滤掉 uri 请求中的实际密码值 以下是 uri 的示例 http services somesite com Services asmx Cabins Usernam
  • 在 Rails 3 中渲染 Markdown 文本

    我想将 markdown 转换为 html 在我看来我有markdown some text variable 但我得到了错误undefined method markdown I added require BlueCoth 到envir
  • 使用 www 和裸域来指向我的 heroku 应用程序

    我无法将 www domain org 和 domain org 设置为指向 Heroku Rails 应用程序 我做了从 www 到 www example org herokudns com 的 CNAME 它工作正常 我的 www e
  • 从父应用程序重新打开 Rails 3 引擎类

    就目前而言 您无法重新打开引擎中包含的引擎类 app只需在父应用程序的目录中添加相同的类即可 app目录 例如 my engine app controllers users controller rb my app app control
  • 通过 Ruby on Rails 应用程序在 Facebook Wall 上发帖的最简单方法是什么?

    上周 我成功地将 twitter 与我的 小型 rails 应用程序集成 如果我在 Rails 应用程序中创建新记录 它将发布在 Twitter 上 但我该如何用 Facebook 做到这一点呢 Twitter 真的很容易 感谢 Twitt
  • 如何配置database.yml以部署到Heroku

    我最近升级到了最新版本的Rails 并且不明白如何将应用程序部署到Heroku 这是我的database yml file default default adapter postgresql pool 5 timeout 5000 dev
  • 如何迁移我的 Heroku 数据库?

    我试过了 heroku rake db migrate and heroku pg push 第一个给我一个 PGerror rake 中止错误 有没有办法用heroku完全重建 重置我的数据库 我似乎在他们的文档中找不到它 编辑 在此之前
  • 更改 en.yml 文件中的属性名称不起作用

    我更改了 ruby on Rails 项目中 en yml 文件中的属性名称 按钮工作正常 但字段属性并没有改变 这是我的模型 class Enr AffordableWarmth lt ActiveRecord Base self tab
  • Rails 中的 Google freebusy api 调用无法识别参数

    我试图从我的主日历中查找所有空闲 忙碌时间 但我无法让查询识别我的参数 在我的控制器中我有 freetimes client execute api method gt service freebusy query parameters g
  • 如何使用 Cucumber 和 Rspec 测试 Rails 3 引擎?

    如果这个问题有点主观 我深表歉意 我正在尝试找出使用 Cucumber 和 Rspec 测试 Rails 3 引擎的最佳方法 为了测试引擎 需要 Rails 3 应用程序 这是我目前正在做的事情 通过运行以下命令将 Rails 测试应用程序
  • 将实例变量传递到表单中 - Rails

    由于我对 Rails 以及如何跨模型使用变量的了解很少 这可能是一个错误 因此如果需要更多代码来回答它或者我的术语不正确 请告诉我 我很乐意更新问题 我有一个帖子供稿 我希望用户能够 喜欢 这些帖子 虽然以下代码允许 Likes 在单个帖子
  • Rails 中的“class << self”是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 Ruby 中的 class https stackoverflow com questions 2505067 class self idiom in ruby有人可以向我解释一下 class htt
  • Rails:使用水豚填充动态字段

    我有一个通过 javascript 动态创建的带有长 id 的文本字段 user user skills attributes 69878013874980 skill title 哪里的69878013874980是生成的时间戳 如何在水
  • 与heroku配合使用的统计引擎

    我有一个 Heroku Rails 应用程序 需要处理一些重要的数字 并且我需要使用像 R 这样的统计库 更糟糕的是 MatLab 我正在寻找以下任何问题的答案 是否有不需要二进制文件的功能齐全的统计包 GEM 是否可以将 R 二进制文件作
  • Rails Structure.sql 和 schema.rb 之间有什么区别

    我知道 schema rb 文件是一个 ruby 文件 它是在运行 rake 迁移时创建和修改的 但是 Structure sql 呢 我在一些项目中看到了 schema rb 在其他项目中看到了 Structure sql 以及在一些这两
  • Rails3 I18n:无法覆盖“1 个错误禁止保存此数据包:”

    当我在模型数据包上遇到错误时 我总是看到第一行 英语 未翻译 1 error prohibited this packet from being saved Naam Gelieve het veld Naam in te vullen 找
  • 推送更改到 Git 不起作用

    每次我想要提交命令 git push heroku master 时 系统都会要求我在 PowerShell 中输入凭据 当我输入 heroku 凭据 默认情况下连接到 git 时 我收到错误消息 但是 当我输入我的主目录中的 netrc
  • 导轨中的多个 DB 连接

    我正在尝试在 ROR 应用程序中连接多个数据库 我的 database yml 如下所示 在你的database yml文件中 发展 adapter mysql username root password database example

随机推荐

  • Visual Studio 2013 - 更改 Peek 定义窗口的背景颜色

    我使用 Visual Studio 2013 Ultimate Resharper 8 和自己的配色方案http studiostyl es http studiostyl es 我想更改查看定义窗口中的背景颜色 因为现在是黄色 也许这导致
  • UIView框架、边界和中心

    我想知道如何以正确的方式使用这些属性 我认为 frame可以从我正在创建的视图的容器中使用 它设置相对于容器视图的视图位置 它还设置该视图的大小 Also center可以从我正在创建的视图的容器中使用 此属性更改视图相对于其容器的位置 最
  • 在 EMR 中引导期间获取“现有锁 /var/run/yum.pid:另一个副本正在作为 pid 运行...”

    我需要在我的 EMR 集群 AMI 3 1 1 中安装 python3 作为引导步骤的一部分 所以我添加了以下命令 sudo yum install y python3 但每次我都会收到以下错误 Existing lock var run
  • 有没有一种简单的方法来打开 Uri 并获取它指向的任何内容? (C#)

    我有一个Uri对象被传递给我的类的构造函数 我想打开文件Uri指向 无论是本地 网络 http 还是其他 并将内容读入字符串 有没有一种简单的方法可以做到这一点 或者我是否必须尝试解决诸如Uri IsFile弄清楚如何尝试打开它 stati
  • 如何使用 Teams Webhooks 发布多行消息?

    我有一个 webhook 设置 可以将消息发布到我们的 Teams 团队频道之一 我正在使用此处给出的团队 Webhook 示例之一 https learn microsoft com en us microsoftteams platfo
  • 推荐的 Ruby 交互式控制台 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Mailkit 或 mimekit 向多个收件人发送一封电子邮件

    请不要将其标记为重复问题 因为该解决方案适用于邮件消息 而不适用于 mailkit 我正在尝试向多个地址发送电子邮件 我尝试使用下面的代码 但我还没有尝试使用循环 var message new MimeMessage message Fr
  • 如何全局禁用 Pylint 特定错误消息?

    我使用 Sublime Text 编辑器和 Pylint 作为 Python 代码解析器 它工作正常 但是每当我定义变量时 我都会收到以下错误消息 C0103 错误 常量名称无效 I read 在这个主题中 https stackoverf
  • 在 Visual Studio 2012 中导入现有源文件

    我想将教程的源代码添加到现有项目中 并且希望将文件从下载到的桌面上的临时文件复制到项目文件夹中 在解决方案资源管理器中单击 源文件 文件夹会引导我进入 添加 gt 现有项目 菜单 然后我可以添加源文件 但是 它不会复制到项目文件夹中 而是保
  • 如何将 Vec 转换为 C 友好的 *mut T?

    我有一个 Rust 库 它返回u8通过 FFI 将数组传递给 C 调用者 该库还可以在客户端使用完数组后处理删除数组的问题 库没有状态 因此客户端需要拥有该数组 直到将其传回库进行释放 Using box from raw and boxe
  • Erlang 生成问题

    我在 erlang 中遇到了 spawn 问题 似乎进程在一段时间后就死掉了 这是简单的代码 module simple export server 1 client 1 owner 1 spawn n 2 start 1 main 1 s
  • javax.xml.bind.JAXBException:不包含 ObjectFactory.class o jaxb.in​​dex

    我有一个 Java Spring Web 应用程序 需要将其用作 SOAP 客户端 我正在使用 Maven 并且有一个包含自定义代码的主模块 WAR 和一个包含 WSDL 我有两个 WSDL 生成的类的子模块 JAR 依赖项 正如您在标题中
  • LsaOpenPolicy 在我的代码中抛出异常。为什么?

    我从新闻组帖子中得到了以下代码 奇怪的是 它在 Delphi 2010 中对我不起作用 LsaOpenPolicy 函数调用时抛出异常 function AddLogonAsAService ID pchar boolean const R
  • 是否可以将批量搜索请求发送到 Google 自定义搜索 API?

    我的应用程序超出了 Google 自定义搜索 API 的限制 在寻求优化我的搜索调用时 我想知道是否有办法批量发送到 API 的搜索请求 我有一些页面 每个用户搜索都会发出多个请求 并且希望将它们批处理为一个 API 调用 我环顾四周 但没
  • 在 React 中的按键上应用按钮“活动”样式

    我在 React Redux 中有一个鼓应用程序 它的功能齐全 但我希望能够在相应的按键按下时应用活动按钮样式 就像我物理单击按钮时一样 就目前情况而言 单击按钮会进行转换 但键入相应的键只会播放音频文件 而不会真正链接到按钮 有没有办法在
  • 如何以 RESTful 方式建模 CANCEL 操作?

    我们目前正在从我们的整体服务中争取较小的服务 我们的域与票务系统非常相似 我们决定开始域名的取消流程 我们的取消服务有一个简单的端点 Cancel 它接收票证的 ID 在内部 我们检索 id 对其执行一些与取消相关的操作 并更新存储中实体的
  • 使用 jquery 将字符串与数字分割[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有类似的字符串 1 test one 2 test two 3 test three 4 test four 5 test five
  • Xcode 中出现错误“未设置视图出口。”

    我在 Xcode 中遇到问题 每次我在模拟器中运行我的应用程序时 该应用程序都会在黑屏视图中停止 并且调试器会编写以下代码 2012 07 04 11 54 08 348 myApp 661 f803 由于以下原因终止应用程序 未捕获的异常
  • Laravel 5 - 未找到 Application::shutdown() 函数,是否有其他解决方案?

    出现致命错误 在 laravel 5 中调用未定义的方法 Illuminate Foundation Application shutdown 代码示例 App shutdown function do somthing 使用 Larave
  • 在进行 Rails asset:precompile 时如何运行一些初始化程序?

    背景 我有一个应用程序 最近更新到了 Rails 3 2 1 从 Rails 3 0 x 并重构了 JS 和 CSS 资源以利用新的资源管道 该应用程序托管在具有 Celadon Cedar 堆栈的 Heroku 上 应用程序配置 我将应用