3

我在 Heroku 上有一个使用 Django 运行的 Python 应用程序。该应用程序启动并完美运行。push 的前几行如下所示:

(venv)➜  djangoproject git:(development) ✗ git push
Counting objects: 33, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (21/21), done.
Writing objects: 100% (21/21), 1.96 KiB, done.
Total 21 (delta 15), reused 0 (delta 0)

-----> Heroku receiving push
-----> Python/Django app detected
...

我需要在测功机(特别是 Compass)上安装一个 gem 程序。

Heroku 的说明是在根目录中提供一个GemfileGemfile.lock所需的 gem。然而,一旦我提供了这个,Heroku 就认为该应用程序是一个 Ruby 应用程序:

(venv)➜  djangoproject git:(development) ✗ git push
Counting objects: 33, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (21/21), done.
Writing objects: 100% (21/21), 1.96 KiB, done.
Total 21 (delta 15), reused 0 (delta 0)

-----> Heroku receiving push
-----> Ruby app detected (NOTE: this is paraphrased)
...

有什么方法可以在将站点作为 Python/Django 应用程序运行时安装 ruby​​ gem?

4

3 回答 3

2

尝试使用显式选择 python buildpackheroku config:add BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-python.git

它仍然会执行检测过程,但我认为(?)它将运行您之前明确选择的 buildpack,而不是尝试任何其他构建包,并且由于您仍然安装了 python 应用程序,它应该可以工作。

请注意,在执行 config:add 之后,您需要在 Heroku 上重建 slug,目前只能通过通过 git 推送实际代码更改来完成。如果您没有要推送的任何实际更改,则可以使用空的 git commitgit commit --allow-empty -m "Empty commit"

您还可以使用 --buildpack 命令行选项创建一个新项目。

于 2012-10-11T23:36:17.927 回答
1

您需要使用自定义 buildpack,它允许您构建 ruby​​ 和 python 依赖项。

  1. heroku config:add BUILDPACK_URL=https://github.com/mandest/heroku-buildpack-rubypython
  2. 将 Gemfile 添加到您的项目中在本地运行捆绑安装(以创建
  3. Gemfile.lock 文件)将您的 Gemfile 和 Gemfile.lock 推送到 heroku

那应该首先安装 ruby​​,然后运行 ​​bundle install,然后安装 python,以及 requirements.txt 文件中的所有 deps。

然而,就我而言,我还想使用 ruby​​ 库运行一些命令,即SASS/COMPASS。为了做到这一点,我认为你有两个选择。第一个,是 fork 上面的存储库并在构建中添加运行这些命令(这​​样他们就拥有所有需要的权限,而不是你运行 heroku run ...)。

第二个选项是添加一个 Rakefile 并在rake assets:precompile task.

因此,在我使用 Compass 的情况下,Rakefile 看起来像:

require 'yaml'
require 'pathname'
require 'rspec/core/rake_task'
include FileUtils


namespace 'assets' do
  desc 'Updates the stylesheets generated by Sass/Compass'
  task :precompile do
    print %x(compass compile --time)
  end
end
于 2013-08-07T09:48:46.297 回答
1

我遇到了同样的问题,这对我有用: https ://github.com/ddollar/heroku-buildpack-multi

这个怎么运作:

  1. 你明确告诉 Heroku 你想使用这个“多”构建包,使用“heroku config:add BUILDPACK_URL=...”命令
  2. 您在根目录中创建一个 .buildpacks 文件,该文件仅列出您要使用的各种构建包的 git URL。我使用了 python 和 ruby​​ 构建包。
  3. git push 到 Heroku 并观察所有 buildpacks 的使用情况

值得一提的是,python buildpack 有几个钩子可以用来做额外的自定义工作。如果您创建 bin/pre_compile 文件或 bin/post_compile 文件,那么这些脚本将在主要编译步骤之前/之后由 python buildpack 调用。所以你也可以使用这些钩子来安装 Ruby 或其他依赖项。但是 IMO 让 Ruby 自己的 buildpack 安装 Ruby 依赖项更容易。

于 2013-07-05T16:31:12.570 回答