Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在Heroku上的python应用程序中安装gem捆绑包_Django_Heroku - Fatal编程技术网

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

Django 在Heroku上的python应用程序中安装gem捆绑包,django,heroku,Django,Heroku,我在Heroku上有一个Python应用程序,运行的是Django。该应用程序启动并运行完美。推送的前几行如下所示: (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)

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

(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程序

Heroku的指示是在根目录中提供一个
Gemfile
Gemfile.lock
,并使用所需的gems。但是,我一提供这个,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吗?

尝试使用heroku config:add buildpack\u URL显式选择Python构建包=https://github.com/heroku/heroku-buildpack-python.git

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

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


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

我遇到了同样的问题,这对我很有效:

工作原理:

  • 您明确地告诉Heroku,您希望使用“Heroku config:addbuildpack\uURL=…”命令使用这个“多”构建包
  • 您可以在根目录中创建一个.buildpacks文件,该文件只列出要使用的各种buildpack的git URL。我使用了python和ruby构建包
  • git推到Heroku并观看所有构建包的使用

  • 还值得一提的是,pythonbuildpack有两个钩子,您可以使用这些钩子进行额外的定制工作。如果您创建了一个bin/pre_编译文件或bin/post_编译文件,那么python构建包将在主编译步骤之前/之后调用这些脚本。因此,您也可以使用这些挂钩来安装Ruby或其他依赖项。但是在我看来,让Ruby自己的buildpack安装Ruby依赖项更容易。

    您需要使用定制的buildpack,它允许您同时构建Ruby和python依赖项

  • heroku配置:添加BUILDPACK\u URL=https://github.com/mandest/heroku-buildpack-rubypython
  • 将Gemfile添加到您的项目运行包本地安装(以创建
  • Gemfile.lock文件)将您的Gemfile和Gemfile.lock推送到heroku
  • 这应该首先安装ruby,然后运行bundle安装,然后安装python,以及requirements.txt文件中的所有DEP

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

    第二个选项是添加一个Rakefile,并在
    rakeassets:precompiletask
    中指定这些内容

    因此,在我使用指南针的情况下,耙形锉看起来像:

    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
    

    回答得真好!设置自定义构建包似乎可以让我在根目录中维护
    Gemfile
    的同时使用Python/Django dyno。不幸的是,默认的heroku buildpack似乎不查找并自动安装Gemfiles。我将尝试使用默认的buildpack并让它运行
    builder
    听起来是个不错的计划。您也可以利用Ruby buildpack的代码来完成这项任务?