小编uma*_*mar的帖子

如何在多个请求中缓存Rails中的查询

我想缓存查询结果,以便"为多个请求"提取相同的结果,直到我使缓存无效.例如,我想渲染一个侧边栏,其中包含书籍的所有页面,就像书的索引一样.因为我想在书的每一页上显示它,我必须在每个请求上加载它.我可以使用动作缓存来缓存渲染的侧边栏索引,但我还想实际缓存用于生成侧边栏html的查询结果.Rails提供了一种方法吗?我该怎么做?

activerecord caching ruby-on-rails

5
推荐指数
1
解决办法
1692
查看次数

如何在使用capistrano进行bundle安装期间指定Gemfile.lock的路径

我的目录结构如下:

application/
  tmp/
  rails_code/Capfile
  rails_code/config/deploy.rb
  rails_code/Gemfile
  rails_code/Gemfile.lock
  non_rails_code/
Run Code Online (Sandbox Code Playgroud)

我使用capistrano来部署应用程序代码,但是当我运行cap deploy时,它无法使用bundler安装gem,因为它希望Gemfile.lock位于应用程序目录中,而它实际上位于application/rails_code目录中.

如何指定Gemfile的正确位置?

capistrano ruby-on-rails bundler rvm

5
推荐指数
1
解决办法
1389
查看次数

如何使has_and_belongs_to_many关系在mongoid中工作

我在rails公司模型中有以下代码:

class Company
  include Mongoid::Document
  include Mongoid::Timestamps

  field :name,      type: String
  ...
  has_and_belongs_to_many :users
end
Run Code Online (Sandbox Code Playgroud)

用户模型:

class User
  include Mongoid::Document
  include Mongoid::Timestamps
  include ActiveModel::SecurePassword

  field :email,           type: String
  ...
  has_and_belongs_to_many :companies
end
Run Code Online (Sandbox Code Playgroud)

数据库中有公司记录,并且用户记录与它们相关联.出于某种原因,以下代码不起作用:

c = Company.first
c.users # returns empty array
Run Code Online (Sandbox Code Playgroud)

同样,以下代码不起作用:

u = User.first
u.companies
Run Code Online (Sandbox Code Playgroud)

但是以下代码可以工作:

c = Company.first
user = User.find c.user_ids.first
Run Code Online (Sandbox Code Playgroud)

以下代码也有效:

u = User.first
company = Company.find u.company_ids.first
Run Code Online (Sandbox Code Playgroud)

因此,如果我尝试从company.users访问用户,它不起作用,但user_ids数组确实有一个用户ID列表,当我尝试从此列表中访问用户时,它可以工作.我该如何解决这个问题?

我使用rails 3.2.5和mongoid 3.0.0.rc

mongoid ruby-on-rails-3

5
推荐指数
1
解决办法
1528
查看次数

设置专用的rails生产服务器

我需要为Rails应用程序设置专用服务器.我不确定这是什么最好的方法.我需要一个可以在很多用户注册网站的情况下扩展的解决方案.我想这将是一个中等规模的应用程序.

以下是更具体的问题:

  • 操作系统可能是ubuntu 10.我应该去ubuntu 10.04还是10.10?
  • 我应该使用sudo安装ruby,因此应用程序的所有宝石,还是应该使用rvm?如果没有rvm安装的成本,我认为这将是首选,因为它具有更大的灵活性,但是使用rvm是生产服务器的一个很好的解决方案?我真的不知道这个
  • 我应该使用nginx/unicorn,nginx/passenger,apache/passenger,还是其他什么?
  • 我需要一个可扩展的数据库,所以postgres可能比mysql更好.或者我应该与其他东西一起去,或者在这里改变我的偏好?

一个相关的问题,虽然与这篇文章没有直接关系:我通常总是在系统范围内使用sudo安装一个ruby,并安装libssl等软件包,然后使用不带sudo的rvm安装其他软件包.这是正确的方法,还是我可以直接安装我需要的所有红宝石rvm没有安装在系统范围内?

ruby stack production ruby-on-rails

4
推荐指数
1
解决办法
5628
查看次数

如何告诉heroku使用rails 3和ruby 1.9.2为新创建的应用程序?

我使用rvm ruby​​1.9.2p0和rails 3.0.1在我的机器上创建了一个新应用程序,并执行了以下操作:

rails new -J -d mysql appname
git init
git add .
git commit
heroku create
Run Code Online (Sandbox Code Playgroud)

并创建了应用程序.但当我这样做时:

heroku rake db:create --trace
Run Code Online (Sandbox Code Playgroud)

我明白了:

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Couldn't create database for {"reconnect"=>false, "encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql2", "database"=>"app_production", "pool"=>5, "password"=>nil, "socket"=>"/var/run/mysqld/mysqld.sock"}, charset: utf8, collation: utf8_unicode_ci
(in /app)
** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:create
Run Code Online (Sandbox Code Playgroud)

当我这样做:heroku rake db:migrate --trace,然后跟踪有如下行:

/app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:590:in
Run Code Online (Sandbox Code Playgroud)

这表明它使用的是红宝石1.8而不是红宝石1.9.2

如何在我的heroku应用程序上创建数据库并使其使用ruby …

ruby mysql ruby-on-rails heroku ruby-on-rails-3

3
推荐指数
1
解决办法
854
查看次数

如何使用rvm将rubygems-1.4.2安装到ruby 1.8.7?

当我做ruby -v时,我明白了

ruby 1.8.7 (2010-12-23 patchlevel 330) [i686-linux]
Run Code Online (Sandbox Code Playgroud)

我想安装rubygems-1.4.2,但命令:

rvm rubygems 1.4.2 
Run Code Online (Sandbox Code Playgroud)

失败,它甚至没有获取rubygems,因为它在curl中失败.所以,我从网上下载文件http://rubyforge.org/frs/?group_id=126,(http://rubyforge.org/frs/download.php/73882/rubygems-1.4.2.tgz),提取它,并将其放在〜/ .rvm/src /,然后再次运行:

rvm rubygems 1.4.2 
Run Code Online (Sandbox Code Playgroud)

但它又失败了.如何将rubygems 1.4.2安装到ruby-1.8.7@p330?

ruby rubygems rvm

2
推荐指数
1
解决办法
2763
查看次数