【问题标题】:Code that only runs when a Rails application is actually running, not during rake tasks, generators, etc仅在 Rails 应用程序实际运行时运行的代码,而不是在 rake 任务、生成器等期间运行的代码
【发布时间】:2013-10-02 20:31:06
【问题描述】:

我们正在尝试建立一个可以在运行的 Rails 应用程序上下文中专门运行的 gem-ready 初始化代码块,但事实证明这非常困难。

我们希望它在以下情况下运行:

  • 应用程序通过rails server从命令行本地启动
  • 应用在 Heroku 或其他部署环境中启动
  • 测试期间

但不适用于:

  • 正在运行 Rake 任务
  • 正在运行生成器
  • 在部署到 Heroku 的过程中运行的任何内容

最后一个例子,尤其是让我们绊倒。每当我们通过git push heroku master 推送到 Heroku 时,我们的应用程序都会在一些奇怪的上下文中执行,它正在生产中,但初始化程序没有可用的 Heroku 配置变量..在任何地方都找不到任何信息..

我们已经看到了这个asked elsewhere,但是传递 ENV 变量不是一种选择,因为它会在 gem 中。

【问题讨论】:

  • 我对此知之甚少,无法提供完整答案,但听起来您可以使用延迟加载挂钩:simonecarletti.com/blog/2011/04/…。此外,部署到 Heroku 时的“奇怪上下文”听起来可能是资产编译步骤——“环境变量在编译时对您的应用程序不可用”:devcenter.heroku.com/articles/rails-asset-pipeline
  • @matt- 感谢您提供两个非常有用的链接。资产管道文章确实为我们在那里处理的内容提供了很多启示。至于延迟加载挂钩 - 听起来很有希望,我现在正在研究它们并将报告回来..

标签: ruby-on-rails heroku


【解决方案1】:

我不知道您如何检测到您处于 Heroku 资产预编译阶段并避免运行一些代码,但您可以使用“用户”在预编译期间获取 Heroku 环境变量Heroku Labs 的 -env-compile' 功能。

https://devcenter.heroku.com/articles/labs-user-env-compile

 heroku labs:enable user-env-compile -a myapp

【讨论】:

  • 谢谢 Jeremy- 是的,我看到了这个选项。虽然看起来这是一个实验性功能,但他们不鼓励它......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2021-09-11
  • 2015-07-15
  • 2017-12-16
  • 1970-01-01
  • 2022-10-02
  • 1970-01-01
相关资源
最近更新 更多