25

我需要帮助。尝试将我的应用程序上传到 heroku 时,出现此错误,有人知道为什么吗?有几个是错的。谢谢

       Using rake (10.1.0)
       ...
       Using tlsmail (0.0.1)
       Using uglifier (2.1.2)
       Your bundle is complete! It was installed into ./vendor/bundle
-----> Writing config/database.yml to read from DATABASE_URL
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       /tmp/build_e8889be5-168c-49ed-81e7-b71061fc82ee/vendor/bundle/ruby/1.9.1/gems/tlsmail-0.0.1/lib/net/smtp.rb:806: warning: already initialized constant SMTPSession
       ...
       /tmp/build_e8889be5-168c-49ed-81e7-b71061fc82ee/vendor/bundle/ruby/1.9.1/gems/tlsmail-0.0.1/lib/net/pop.rb:702: warning: already initialized constant APOPSession
       DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /tmp/build_e8889be5-168c-49ed-81e7-b71061fc82ee/Rakefile:7)
       ...
       rake aborted!
       could not connect to server: Connection refused
       Is the server running on host "127.0.0.1" and accepting
       TCP/IP connections on port 5432?
       /tmp/build_e8889be5-168c-49ed-81e7-b71061fc82ee/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize'
       /tmp/build_e8889be5-168c-49ed-81e7-b71061fc82ee/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `new'
       ...
       /tmp/build_e8889be5-168c-49ed-81e7-b71061fc82ee/vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.12/lib/sprockets/assets.rake:29:in `block (2 levels) in <top (required)>'
       Tasks: TOP => environment
       (See full trace by running task with --trace)
 !
 !     Precompiling assets failed.
4

4 回答 4

29

来自Heroku 文档

这意味着您的应用程序正在尝试作为 rake assets:precompile 的一部分连接到数据库。因为环境中不存在配置变量,所以我们使用占位符 DATABASE_URL 来满足 Rails。

要解决此问题,请确保以下行出现在您的config/application.rb:

# config/application.rb
config.assets.initialize_on_precompile = false

添加后,提交您的更改并重新部署到 Heroku - 您的资产应该在您的应用程序不尝试连接到数据库的情况下编译,这应该可以解决您目睹的错误。

更新

您的堆栈跟踪的第 46 行包含以下消息:Devise.secret_key was not set.

根据Devise 的作者José Valim的说法,这个问题可以通过以下方式解决:

请在您的设计初始化程序中添加以下内容:

config.secret_key = '-- 密钥 --'

或者以下解决方案似乎适用于许多用户:

我去了我的 routes.rb 文件并注释掉了 devise_for :installs 行

然后我回去重新运行 rails generate devise:install。如果这不起作用,请通过编辑您的 Gemfile 对 Devise 的引用来使用以前版本的设计,如下所示:gem 'devise', '3.0.3' 然后按照我上面提到的步骤操作。

于 2013-10-29T05:49:28.457 回答
16

有几件事为我解决了这个问题:

# config/application.rb
config.assets.initialize_on_precompile = false

然后,在我部署之前,我在本地编译了我的资产并提交了它们:

RAILS_ENV=production bundle exec rake assets:precompile

另外,我安装了这个heroku插件,正如我正在启动的应用程序所指定的(在我的例子中,Spree commerce)

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

当然,请确保您的 database.yml 文件设置为使用adapter: postgresql.

提交所有这些,推送到heroku,希望它会启动。如果您仍然无法打开您的应用程序,请尝试查看 Heroku 日志:heroku logs -n 500

我仍然需要迁移我的数据库heroku run rake db:migrate

于 2014-02-02T15:23:09.873 回答
3

当您使用 github 并且在开发分支中推送到 heroku 时,不要这样做,转到 master 分支并通过以下方式获取开发中的更新git merge develop

在那之后,

rails precompile:assets
git add -A
git commit -m "Precompile assets"
git push heroku master

如果你想打开你部署的网站

heroku open

如果没有显示,请首先通过以下方式迁移您的数据库:

heroku run rails db:migrate
heroku open
于 2019-07-24T11:38:37.703 回答
1

我使用相同的错误消息使 Heroku 过程编译失败。Carrierwave 导致这种情况是因为我错过了SECRET_KEY_BASEHeroku 设置。

于 2018-10-23T06:27:38.180 回答