Tag: mysql

MySQL将UTF-8更改为ASCII-8BIT

我有这种情况。 电影名称: $ title = “La leyenda de Osaín” 使用此编码: $ title.encoding.name >> UTF-8 然后我将其保存到数据库中。 $ movie = Movie.create!(:title => title) 然后我试着去拍电影。 $ Movie.find(movie.id).title.encoding.name >> “ASCII-8BIT” $ Movie.find(movie.id).title >> “La leyenda de Osa\xC3\xADn” 所有其他电影的作品不包含í和û等特殊字符。 这是我的database.yaml文件: development: adapter: mysql database: development username: linus password: my_password socket: /tmp/mysql.sock encoding: UTF8 使用forced_encoding时,我得到了正确的数据。 $ Movie.find(movie.id).title.force_encoding(“UTF-8”) >> “La leyenda de […]

‘mysql的未定义方法init:Class’

我一直遇到MySQL服务器安装问题,在停电后搞砸了。 组态 Intel i5 Mac运行OS X 10.6.5 Ruby 1.9.2已安装 安装了Rails 3.0.1 MySQL服务器(最后)安装并运行 我完全重新安装了MySQL,它删除了本地开发/测试/生产数据库。 所以,我已经运行了create database development; 在MySQL中,让dev数据库为迁移做好准备。 目前的目标 运行rake db:migrate以重新获取我的数据库。 (我目前无法从Rails访问我的数据库或Mysql。) 错误 使用’mysql’, ‘2.8.1’并运行rake db:migrate ,我收到错误: rake aborted! undefined method ‘init’ for Mysql:Class 堆栈跟踪: /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/mysql_adapter.rb:30:in ‘mysql_connection’ /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:230:in ‘new_connection’ /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:238:in ‘checkout_new_connection’ /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:194:in ‘block (2 levels) in checkout’ /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in ‘loop’ /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in ‘block in checkout’ /Users/sscirrus/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/monitor.rb:201:in ‘mon_synchronize’ /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:189:in […]

将JSON数据存储在mysql中

我有一个组织表例如 ID, name, address, phone, email, etc… 现在我想添加多个地址,电话和电子邮件。 这是在这样的电子邮件列中存储json数据的好方法 [ “address2@example2.com”, “address2@example2.com”, “address2@example2.com” ] 或者为电子邮件创建另一个表,为电话等创建另一个表… 如果存储json数据更好 – 在rails中使用它的最佳方法是什么?

真的需要一个db连接池用于unicorn rails吗?

我找不到任何描述独角兽数据库连接池效应的文档。 Unicorn分叉了几个工人流程。 我配置了prefork,关键是不要在worker之间共享数据库连接,所以我在fork之后重置db连接。 我的rails应用程序每个服务器有8个worker,而database.yml中的pool大小是5,然后我看到了45个与mysql的连接。 每个worker都是单线程的,一次处理1个请求。 SQL查询应该是阻塞的。 似乎其他4个连接都没用? 我可以将池大小设置为1以获得更好的性能吗?

MySQL复合索引中的键的高性能排序(WRT Rails多态关联和STI)

以前,我在ActiveRecord中询问了关于多态外键的复合索引的问题 。 我的问题的基础是我的理解,索引应该基于列的基数,并且在Rails的STI类型和多态_type列上通常具有相当低的基数。 接受我的问题的答案是正确的 – 将高基数_id列和低基数_type列编入索引是有价值的,因为它们一起具有高基数 – 我的下一个问题是:你应该如何订购你的化合物索引? [owner_id,owner_type]的索引首先放置具有较高基数的字段,而[owner_type,owner_id]将具有较高基数的字段放置在第二位。 使用前一个键的查询是否比使用后一个键的查询更高效,或者它们是否同样高效? 我问,因为这对我如何为服务STI模型的表订购复合键有特别的影响。 STI Rails查找器几乎总是查询类型列 – 这也是一个通常低基数的列。 因此,比其他索引更频繁地查询类型列。 如果更频繁地查询类型列,那么使用类型前导索引可能是有意义的,因为较少特定的查询可以利用索引的第一部分来产生性能提升。 但是,对于高度特定的查询而言,我不会因为性能的损害而小费。 利用索引的高基数部分。

无法激活mysql2(〜> 0.3.6),已经在Rails 3.1中激活了mysql2-0.3.2

我只是试图获得在3.1下运行的rails应用程序的最基本的shell,当我运行bundle exec rake db:migrate时,我遇到了这个奇怪的错误 Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (can’t activate mysql2 (~> 0.3.6), already activated mysql2-0.3.2. Make sure all dependencies are added to Gemfile.) 我在这里和其他地方读到的所有post都说我应该使用较新的mysql2适配器用于rails 3.1,所以我有 – gem ‘mysql2’, ‘0.3.2’ 在我的gemfile中。 有些post建议使用 – gem ‘mysql2’, ‘~> 0.3’ 但这给我带来了同样的错误。 gem安装在 – /Users/mark/.rvm/gems/ruby-1.9.2-p180@rails310pre/gems/mysql2-0.3.2 有人建议我再次在我的gem文件中切换该行,这次是 – gem ‘mysql2’, ‘< 0.3' 但是当我这样做时,运行bundle install,然后尝试再次运行迁移,我得到 – An […]

在什么情况下你希望Rails设置为不重新连接到MYSQL

我在rails应用程序上遇到了一些错误,其中包括: ActiveRecord::StatementInvalid: Mysql::Error: Lost connection to MySQL server during query: SELECT * FROM `actions` WHERE (`foo`.`id` = 16) 似乎正在发生的事情是mysql连接在超时后被关闭,并且rails没有注意到它为时已晚。 我找到的补救措施 似乎是在database.yaml中将reconnect标志设置为true,或者对于添加一些代码的任何数据库操作: def some_database_operation begin Account.find(1) # or some other database operations here… rescue ActiveRecord::StatementInvalid ActiveRecord::Base.connection.reconnect! unless @already_retried @already_retried = true retry end raise else @already_retried = false end end end 我在此处列出了此选项,因为此选项显然对交易不安全: ActiveRecord::ConnectionAdapters::MysqlAdapter.module_eval do def execute_with_retry_once(sql, […]

Rails`where`的时间少于查询

建立 Rails’where方法可以在哈希中获取范围以生成将搜索范围内的值的查询。 例如: User.where(cash_money: 10..1000) #=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` BETWEEN 10 AND 1000) 这也可以用于时间戳 User.where(last_deposit: 10.days.ago..1000.days.ago) #=> SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` BETWEEN ‘2014-05-19 14:42:36’ AND ‘2011-09-02 14:42:36’) 我发现你可以使用这样的哈希语法做一个小于或大于数字的简单 User.where(cash_money: 10..Float::INFINITY) #=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` >= 10) 对于少于查询,使用-Float::INFINITY可以完成相同的操作。 题 有没有办法用时间戳来做到这一点,所以我可以得到如下的查询? SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= ‘2014-05-19 […]

多个Rails应用程序,单个MySQL数据库

我打算为site.com,api.site.com,admin.site.com分别拥有多个Rails应用程序。 所有应用程序都将从一个MySQL数据库访问相同的表。 应用和数据库在同一服务器中运行。 Rails,ActiveRecord或MySQL中是否有任何设置需要关注上述访问场景? 谢谢 运行:Rails 2.3.5,MySQL 5.0,Nginx,Passenger,RubyEE

Ruby on Rails database.yml中的socket声明是什么?

在config / database.yml中使用socket声明有什么用? 示例代码: staging: adapter: mysql encoding: utf8 database: (database) pool: 5 username: (user) password: (pass) socket: /tmp/mysql.sock # <——— this line 我的应用程序有效,这条线是否被评论。 那有什么用呢? 我有什么理由可以留下它,评论它或改变它的价值?