【问题标题】:How to make "assets:precompile" NOT load the database? (Rails)如何使“资产:预编译”不加载数据库? (导轨)
【发布时间】:2012-02-27 12:28:22
【问题描述】:

我正在 Heroku (Cedar) 上部署我的 Rails 应用程序,我可以选择 3 个关于预编译我的资产的选项,我选择了 Heroku 在部署时预编译我的资产的选项。

当我推送时,我收到一个错误,它无法访问我的数据库(在预编译期间)。 那么,如何让Rails在预编译时不连接数据库?我不知道为什么要设置它,因为我无法想象预编译需要访问数据库的场景.

我在某处看到了在预编译时禁用初始化应用程序的解决方案,这是通过在 application.rb 中添加以下内容来实现的(在 environment/production.rb 中设置它不起作用):

config.assets.initialize_on_precompile = false

我尝试添加此行,它可以工作,但我不知道这是否是一个好的解决方案。这不会使您可能使用的一些插件在预编译期间无法加载资产,从而影响最终结果吗?

【问题讨论】:

    标签: ruby-on-rails database heroku assets precompile


    【解决方案1】:

    您正在做的是正确的方法。如果您不使用模型/其他任何实际访问资产中数据库的东西,那么您就不需要它。唯一需要初始化应用程序的情况是,如果您正在执行以下操作:(完全人为的示例,但您可以看到我的意思)

    /* In some css file */
    .some_class{
        #{User.find(1).avatar_url}
    }
    

    【讨论】:

      【解决方案2】:

      如果您启用 Heroku Labs (http://devcenter.heroku.com/articles/labs-user-env-compile),您可以在部署时访问您的 Db,效果很好。

      您使用设计吗?这通常是偶然对预编译资产进行数据库访问的罪魁祸首。

      【讨论】:

      • 不,我不使用设计。感谢您的建议,但我想通过禁用对数据库的访问来解决它,因为我不需要它。另外,如果我学会了如何做到这一点,也许我也会学习如何改变一些关于预编译的其他事情,这将是一个非常有用的知识:)
      • 我正在使用 CarrierWave。你认为这可能与它有关吗?
      • ...但我会接受,因为它比我迄今为止看到的任何解决方案都要好:)
      猜你喜欢
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2013-08-30
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多