七牛云端存储,想说爱你不容易

部署时踩坑七牛云存储。

写在前面

前段时间,租了阿里云,买了域名,最近折腾了下,终于把之前做的网站部署上去了。

整个部署过程中,感觉最虐的就是七牛云那块了,对于半路出家的新手来说,真是个不小的坑。记录下这段虐心的旅程。


正文

我用的是Capistrano来部署Rails项目,这里只记录一下我在远端服务器运行seed时,会出现的问题。
好,我们开始吧!
当你在终端~/yourproject_name/current执行RAILS_ENV=production bundle exec rake db:seed, 可能会出现如下报错:

  • NoMethodError: undefined method qiniu_up_host

    这个报错出现的有些奇怪,我在本地运行rake db:seed时,也报错,而我之前部署到heroku时并没有出现过这种情况,不解。

    虽然不理解它为什么会出现,但是有问题咱就得想着解决,看看怎么破了它。

    解决办法:

    方法很粗暴。
    在本地的config/initializers/carrierwave.rb文件中,将host那一行直接注释,然后运行rake db:seed, 发现OK啦。

    为什么我会想到直接注释?Google了下,发现如果你的服务器在国内,qiniu_up_host是可以不用设置的。

    另外,还有一种情况是config.qiniu_up_host的值写错了,不同的存储区域是不一样的,具体可以参见七牛开发者中心-存储区域

  • TypeError: no implicit conversion of nil to String

    出现这个情况,是因为我使用了Figaro 管理密码,之前部署到heroku时,终端运行figaro heroku:set -e production就可以了,但是这里,我们怎么把七牛对应的AccessKey,SecretKey等信息放入remote server呢?

    其实,Figaro 的README文档中已经提到了,咱们这么来:

    Step1、在远端的~/yourproject_name/shared/config中,添加application.yml, 内容如下:

    ```Ruby
    production:
    qiniu_access_key: xxxx # 你的 qiniu AccessKey

    qiniu_secret_key: xxxx # 你的 qiniu SecretKey

    qiniu_bucket: xxxx # 你的 qiniu bucket

    qiniu_bucket_domain: xxxx # 你的 qiniu bucket domain

development:
qiniu_access_key: xxxx # 你的 qiniu AccessKey

 qiniu_secret_key: xxxx  # 你的 qiniu SecretKey

 qiniu_bucket: xxxx  # 你的 qiniu bucket

 qiniu_bucket_domain: xxxx  # 你的 qiniu bucket domain

这里,虽然我们添加了这个文件,但是由于你的`config/deploy.rb`中没有设置,所以部署的时候并不会去连接这个文件。

Step2、在本机上编辑`config/deploy.rb`,将`application.yml`添加进去:

```Ruby
-  append :linked_files, "config/database.yml", "config/secrets.yml"
+  append :linked_files, "config/database.yml", "config/secrets.yml", "config/application.yml"

OK啦!记得commit 和 push,再运行 cap production deploy,最后在远端服务器运行seed。

  • TypeError: class or module required for rescue clause

    看到报错,第一反应就是google,在carrierwave-qiniu configuration error #17 中, 提到qiniu-rs这个gem已经没有人在维护了,要安装最新版的carrierwave-qiniu。好,那就重新安装,又不是第一次被版本坑了: P。

    在gemfile中做如下修改:

    + gem 'carrierwave-qiniu', '~> 1.1.5'
    
    - gem 'qiniu-rs'
    

    终端运行bundle install, 报错显示:

    显示没有mime-types,按照提示,运行bundle update, OK!


The end

Attention:

请在每次修改后,进行git commit 和 git push ,然后在本地运行 cap production deploy部署,Capistranno会从GitHub上拉下最新的进度,最后在远端服务器的~/yourproject_name/current目录下,运行RAILS_ENV=production bundle exec rake db:seed

哦,附上我的成品Together is better : P.