我在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的说明是在根目录中提供所需宝石的Gemfile
和Gemfile.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?
答案 0 :(得分:2)
尝试使用heroku config:add BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-python.git
它仍将执行检测过程,但我认为(?)它将运行您之前明确选择的构建包,而不是尝试任何其他构建包,并且由于您仍然安装了python应用程序,它应该可以工作。
请注意,执行配置后:添加你需要在Heroku上重建你的slug,目前只能通过git推送实际的代码更改来完成。如果您没有使用git commit --allow-empty -m "Empty commit"
您还可以使用--buildpack命令行选项创建新项目。
答案 1 :(得分:1)
我遇到了同样的问题,这对我有用: https://github.com/ddollar/heroku-buildpack-multi
工作原理:
还值得一提的是,python buildpack有几个钩子可以用来做额外的自定义工作。如果您创建bin / pre_compile文件或bin / post_compile文件,那么这些脚本将在主编译步骤之前/之后由python buildpack调用。所以你也可以使用这些钩子来安装Ruby或其他依赖项。但IMO让Ruby自己的buildpack更容易安装Ruby依赖项。
答案 2 :(得分:1)
您需要使用自定义buildpack,它允许您构建ruby和python依赖项。
heroku config:add BUILDPACK_URL=https://github.com/mandest/heroku-buildpack-rubypython
应首先安装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