【问题标题】:Why does Travis fail to connect use Redis cache_store when deploying to Heroku?为什么 Travis 在部署到 Heroku 时无法连接使用 Redis cache_store?
【发布时间】:2015-01-21 12:47:34
【问题描述】:

我在我的 Rails 应用程序中使用 Redis 缓存:

config.cache_store = :redis_store, redis_url

当我将 Rails 应用程序直接推送到 Heroku 时,它已成功部署。使用 Travis 时,Heroku 部署步骤失败,因为资产预编译尝试连接到 Redis。

   Running: rake assets:precompile
   rake aborted!
   ArgumentError: invalid uri scheme ''
   /tmp/build_7c5f167bf750cb2986dbb9c3510ea11e/vendor/bundle/ruby/2.1.0/gems/redis-3.2.0/lib/redis/client.rb:390:in `_parse_options'

我尝试了各种方法:使用 rake 任务覆盖 RedisStore 方法,将 cache_store 实例化移动到初始化阶段,使用 Docker 代替 sudo,更改 Heroku 构建策略和其他 travis.yml 配置等。

我不想在本地预编译,我也不想改变缓存解决方案。在 cedar-14 堆栈上运行的许多其他应用程序使用非常相似的设置,因此问题似乎有点奇怪。

对于如何解决这个 Travis+Heroku 部署问题有什么建议吗?

【问题讨论】:

  • 我也遇到了同样的问题,而且对于它的价值,我在 fork 我的 heroku 应用程序时也看到了这个问题。
  • @joshrl 请看下面我的回答,以防你还没有解决。

标签: ruby-on-rails heroku deployment redis travis-ci


【解决方案1】:

就我而言,我通过将 redis init 更改为:

REDIS = Redis.new(:url => redis_url_string)

之前我在哪里解析 URI 并将参数传递为:

uri = URI.parse(redis_url)
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password, :scheme => uri.scheme)

我想知道缓存存储初始化是否有类似的redis初始化实现(我没有检查那里的源代码)。

【讨论】:

  • 我还必须将 Redis.new 参数替换为 ':url'。他们在某个时候改变了实现。然而,这与这个 cache_store 问题无关。不过,我们已经解决了这个问题,所以我会在今天的某个时间回答我的问题。
【解决方案2】:

我们通过覆盖 Redis::Store 初始化解决了这个问题。当使用 Travis 触发 Heroku 部署时,Redis Store 会尝试连接到 Redis。这可能是由于 Redis Store gem 的当前版本(2013 年 11 月)与当前资产管道实现不兼容。直接推送到 Heroku 时,为什么这会起作用尚不清楚。当使用 travis.yml 文件中指定的 Heroku 构建策略时,它可能与编译资产的顺序有关。也许这些问题会在未来的 Redis Store 版本中得到解决。

这是使用 Redis Store 作为缓存存储 (lib/assets/tasks/assets.rake) 时避免加载 Redis 的 rake 任务:

pt = Rake::Task['assets:environment']
Rake.application.send(:eval, "@tasks.delete('assets:environment')")

namespace :assets do
  task :environment do
    class Redis
      class Store
        def initialize(options = { })
          puts ”Do nothing"
        end
      end

      def initialize(options = { })
        puts ”Do nothing"
      end
    end
    pt.execute
  end
end

这不是一个非常优雅的解决方案,但现在可以解决问题。请考虑更改缓存解决方案。

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 2022-09-23
    • 1970-01-01
    • 2015-03-10
    • 2022-01-26
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多