在Heroku上的python应用程序中安装gem包

时间:2012-10-11 23:31:29

标签: django heroku

我在Heroku上运行了一个使用Django的Python应用程序。该应用程序启动并完美运行。推送的前几行看起来像这样:

(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
...

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

Heroku的说明是在根目录中提供所需宝石的GemfileGemfile.lock。然而,只要我提供这个,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?

3 个答案:

答案 0 :(得分:2)

尝试使用heroku config:add BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-python.git

显式选择python buildpack

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

请注意,执行配置后:添加你需要在Heroku上重建你的slug,目前只能通过git推送实际的代码更改来完成。如果您没有使用git commit --allow-empty -m "Empty commit"

进行任何真正的推送更改,则可以进行空git提交

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

答案 1 :(得分:1)

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

工作原理:

  1. 您明确告诉Heroku您要使用“heroku config:add BUILDPACK_URL = ...”命令来使用此“multi”buildpack
  2. 您在根目录中创建一个.buildpacks文件,该文件只列出了您要使用的各种buildpack的git URL。我使用了python和ruby buildpacks。
  3. git push to Heroku并观看所有buildpacks的使用
  4. 还值得一提的是,python buildpack有几个钩子可以用来做额外的自定义工作。如果您创建bin / pre_compile文件或bin / post_compile文件,那么这些脚本将在主编译步骤之前/之后由python buildpack调用。所以你也可以使用这些钩子来安装Ruby或其他依赖项。但IMO让Ruby自己的buildpack更容易安装Ruby依赖项。

答案 2 :(得分:1)

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

  1. heroku config:add BUILDPACK_URL=https://github.com/mandest/heroku-buildpack-rubypython
  2. 将Gemfile添加到项目中本地运行bundle install(创建
  3. Gemfile.lock文件)将您的Gemfile和Gemfile.lock推送到heroku
  4. 应首先安装ruby,然后运行bundle install,然后在requirements.txt文件中安装python和所有deps。

    但是,在我的情况下,我还想使用ruby库运行一些命令,名字 SASS / COMPASS 。为了做到这一点,我认为你有两个选择。第一个是在存储库上方进行分叉并在构建中添加运行这些命令(这​​样它们就拥有了所有需要的权限,而不是运行heroku运行...)。

    第二个选项是添加一个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