生产环境下的Rails rake assets:precompile

25

我想为我的应用程序预编译资产以部署到Heroku,但遇到了以下错误。

运行以下命令时:

RAILS_ENV=production bundle exec rake assets:precompile

错误:

/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
rake aborted!
Please install the postgresql adapter: `gem install activerecord-postgresql-adapter` (pg is not part of the bundle. Add it to Gemfile.)

由于我在开发中使用SQLite,在生产中使用Postgresql,因此有以下的Gemfile

gem "rails", "~> 3.1.0"

group :production do
  gem 'pg'
end

group :development, :test do
  gem 'sqlite3'
end

gem 'sass-rails', "~> 3.1.0"

group :assets do
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
  gem 'compass', '~> 0.12.alpha.0'
  gem 'html5-boilerplate'
end

我尝试了很多次但无法让它工作。

我不知道这是否重要,但我的 database.yml 看起来像:

production:
  adapter: postgresql
  host: localhost
  database: db
  encoding: unicode
  username: user
  password: ''

1
你尝试在 Cedar Stack 上运行过这个命令吗?heroku create --stack cedar - daniel
这个问题类似于https://stackoverflow.com/questions/36046092/rake-assetsprecompile-rails-env-production-error/36083793#36083793。链接中的回答(包括我的)都是有帮助的。 - krazedkrish
1个回答

54

旧问题,但被接受的答案并没有真正回答这个问题-我在搜索中找到了这个,所以我想它是相关的。

错误的原因是gem 'pg'在生产gem组里。
当你运行rake assets:precompile时会访问生产环境。所以它试图加载生产环境但你没有安装所有的依赖项

运行RAILS_ENV=production bundle exec rails server可能会给你一个类似的错误。

我能想到两种不同的解决方案:

1)查看你的应用程序根目录下是否有.bundle/config文件。如果有,检查它是否写着WITHOUT : production或类似的内容。删除该行或整个.bundle目录,然后再次运行bundle

2)在Gemfile

gem :development, :production do
  gem 'pg'
end

在移除:production组的同时
再次运行bundle

抱歉提起旧事...


4
抱歉我不小心给你点了踩,但现在我无法取消它 :( -- 我其实觉得你的回答很有用。 - Sherwin Yu
@SherwinYu 只需再次点击下投票图标,您的投票将被取消。 - David Tuite
很抱歉,@DavidTuite,如果已经过了一段时间,你就不能取消点踩了——除非回答被编辑过。 - Sherwin Yu
我刚在某个地方看到,如果我编辑它,它可以重新获得赞同票。@SherwinYu 我们来测试一下!顺便感谢ChristopheHarris。 - mraaroncruz
@pferdefleisch 感谢您的回答。解决方案2)对我非常有效。 - egyamado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接